簡體   English   中英

為什么在部署到AWS時無法在node.js中表達sendFile()?

[英]why I can't sendFile() in node.js express when deployed to AWS?

我正在使用node.js express將某些靜態文件(如svg和json)提供給客戶端,因此我使用sendFile()直接發送文件。

這是我的服務器文件結構,

/root    // the root of the server
   /maps    // put some static files
     /routes/api     // put the web API

在網絡API中

app.get('/buildings/map',function(req,res){
    var mappath = 'maps/ARM-MAP_Base.svg';
        res.sendfile(mappath);
})

它在我的本地服務器上可以完美地將文件發送到客戶端,因此這意味着服務器可以找到文件並將其發送。 但是將服務器部署到AWS時,此方法將遇到錯誤-242:Error:ENOENT,stat node.js,看起來它無法在該路徑中打開文件

我讀了一些解決方案,例如將__dirname與mappath結合使用,它不起作用,因為它將帶到/ routes / api / maps /的路徑...

到目前為止,我不知道為什么它可以在我的本地計算機上運行,​​但是無法在AWS上運行

相對的fs路徑(例如mappath將從當前的工作目錄中解析,這不能保證是一致的。 它在本地工作,因為您正在使用/root作為工作目錄執行應用程序。

這就是為什么您找到使用__dirname建議的原因, __dirname可用於解析相對於當前腳本的路徑。

不過, ../ ,您將需要使用../解析父目錄

var mappath = 'maps/ARM-MAP_Base.svg';
res.sendfile(__dirname + '/../../../' + mappath);

這假定當前腳本位於,並且__dirname將是/root/maps/routes/api如目錄樹中的縮進所示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM