因缺少绝对路径引发的部署血案-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

因缺少绝对路径引发的部署血案

简介: 因缺少绝对路径引发的部署血案

问题描述

博主在学习Next应用的时候,使用express作为后台,部署在本地一切正常,但是部署在字节的轻服务上便出现如下错误。

image.png

解决过程

尝试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则会避免这个问题,直接找到这个资源的绝对路径。

参考资料

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章
最新文章
展开
相关文章