问题描述
博主在学习Next应用的时候,使用express作为后台,部署在本地一切正常,但是部署在字节的轻服务上便出现如下错误。
解决过程
尝试1:尝试是否是跨域问题
刚开始遇到这个错误,我判断可能是跨域问题,后来经排查不是,因为如果是跨域问题,自定义的路由不可能被访问成功,但是我通过postman访问自定义路由是能够成功的,说明不是跨域的问题,而且我已经配置了下面的语句。
app.use(cors()); // 解决跨域 复制代码
尝试2:修改静态资源的路径
因为只有静态资源无法访问,说明可能是配置静态资源的中间件出来问题,所以我刚开始在网上找到了这样的一个解决方案,即下面的语句。
app.use(express.static(path.join(__dirname, 'build', 'public'))); 复制代码
上面的解决也是无效,后来我咨询了字节轻服务的相关工程师,原来是因为path.join会拼接字符串,但是我的路径中并没有build这个文件夹,所以报错,我原本还以为这两个文件夹是并列关系,原来是拼接关系。
尝试3:修改为绝对路径(最终解决方案)
在字节轻服务工程师的帮助下,我才用了绝对路径的方式来公开静态资源,这一次成功了~
感谢字节轻服务的工程师。
app.use(express.static(path.join(__dirname, 'public'))); 复制代码
问题原因
在express公开静态资源的时候,如果不加入绝对路径,会按照云平台中的node执行的位置去找,自然会出现找不到的情况,自然会出现404的错误,但是我们如果加上了绝对路径dirname则会避免这个问题,直接找到这个资源的绝对路径。