pdfjs使用bug,pop导致的bug
发表于:2024-04-19 |

前言

今天代码提测了,好家伙,整出来好多bug,有pdfjs使用的bug,也有pop导致的bug

pop的bug

这个是我太不小心了,这里我就简单描述一下,大家以后自己别犯错就行
差不多就是我这样写了一个全局常量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
export const TABLE_COLUMN=[
{
title: 'Name',
key: 'name',
},
{
title: 'Age',
key: 'age',
},
{
title: 'Address',
key: 'address',
},
{
title: 'Action',
key: 'action',
},
]

然后我在俩个不同的.vue中需要调用他,其中一个.vue文件不需要Action,然后另外一个需要Action

所以我在那个不需要Action的.vue中自作聪明用了TABLE_COLUMN.pop(),我想你看到这里也知道了问题,没错,我把这个全局常量给改掉了,导致我在后续另外一个需要Action的.vue中引入TABLE_COLUMN没有了Action,当我打开不需要Action的那个.vue文件的页面次数越多,就会让TABLE_COLUMN他的元素越来越少,其实我们都知道pop会改变原数组,这个错误我一不小心还是犯了,然后解决方案也很简单,在不需要Action的.vue文件中[...TABLE_COLUMN].pop()

public文件夹问题

我之前不说过把pdfjs放在public文件夹下面吗,然后我把我的代码发布了,因为当时我的地址用的/xxxxx,因为public本地是可以这样的,但是我发到线上去,因为我打包出来后的文件夹是有自己的名字的,比方说,我定义为admin,那么实际上,这个pdfjs文件需要引用的地址是/admin/xxxxx,而不是/xxxx,因此我们最好在.env,.env.develop(本地和线上)文件做一个区分,这里以.env.env.develop作为例子,这里如果是用这个方式的话,俩边的地址你都可以定义为

1
VITE_PDF_URL_PREFIX = `/xxxxx`

然后在调用的地方

1
const prefixUrl=import.meta.env.VITE_PDF_URL_PREFIX

pdfjs报错

错误差不多是这样Failed to load module script: Expected a JavaScript module script but the server responded

错误原因就是这样的

MIME 类型设置不正确: 服务器返回的文件 MIME 类型不正确。浏览器期望模块脚本的 MIME 类型为 application/javascript。如果服务器返回的 MIME 类型不是这个,浏览器会拒绝加载它,并显示这个错误,本质就是mjs文件在服务器中被识别成了application/octet-stream,我们需要在服务器的ngnix进行配置

nginx配置修改

在nginx的默认mime.types文件中没有为mjs扩展名设置条目,这意味着它将被作为application/octet-stream而不是application/javascript进行服务。可以通过在服务器、http或location块中显式包含mime.types并添加一个types块来设置mjs文件的MIME类型和文件扩展名:

1
2
3
4
5
6
7
8
9
10
11
server
{
include mime.types;
types
{
application/javascript mjs;
}

...

}

或者在springboot中加上一个东西

1
spring.servlet.mime-mapping.mjs=application/javascript

结语

今日份写bug小能手-就是我,债见~

上一篇:
使用jszip压缩文件夹
下一篇:
【可视化学习】60-XR-FRAME学习(一)