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

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

问题描述

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

参考资料

相关文章
|
存储 iOS开发 Windows
利用Dism修复系统步骤,以及dism找不到源文件解决方案
利用Dism修复系统步骤,以及dism找不到源文件解决方案
6547 0
利用Dism修复系统步骤,以及dism找不到源文件解决方案
|
JavaScript
cnpm : 无法将“cnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。所在位置 行:1 字符: 1
cnpm : 无法将“cnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。所在位置 行:1 字符: 1
792 0
完美解决->“pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。”
完美解决->“pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。”
完美解决->“pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。”
|
4月前
|
存储 缓存 Unix
xdg - 获取 XDG 标准目录路径
xdg - 获取 XDG 标准目录路径
106 0
|
JavaScript
tsc : 无法将“tsc”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
tsc : 无法将“tsc”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
tsc : 无法将“tsc”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
|
5月前
|
Java
Error:java: 错误: 无效的源发行版:13, 类文件具有错误的版本 61.0, 应为 55.0 请删除该文件或确保该文件位于正确的类路径子目录中。
Error:java: 错误: 无效的源发行版:13, 类文件具有错误的版本 61.0, 应为 55.0 请删除该文件或确保该文件位于正确的类路径子目录中。
|
6月前
|
C++
C++ 获取当前程序路径
C++ 获取当前程序路径
|
7月前
|
C++
[C++] 获取工程路径、解决方案路径和.exe路径
[C++] 获取工程路径、解决方案路径和.exe路径
174 1
|
PHP
php : 无法将“php”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
php : 无法将“php”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
2196 0
php : 无法将“php”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
|
JavaScript 中间件
因缺少绝对路径引发的部署血案
博主在学习Next应用的时候,使用express作为后台,部署在本地一切正常,但是部署在字节的轻服务上便出现如下错误。
410 0
因缺少绝对路径引发的部署血案