天天看點

因缺少絕對路徑引發的部署血案

問題描述

部落客在學習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則會避免這個問題,直接找到這個資源的絕對路徑。

參考資料

繼續閱讀