为什么我在部署到AWS时无法在node.js中发送sendFile()?

时间:2014-03-22 03:28:44

标签: node.js amazon-web-services express

我使用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:错误:ENOENT,stat node.js,看起来无法在该路径中打开文件

我读了一些解决方案,例如将__dirname与mappath结合起来,它没有用,因为它会带到/ routes / api / maps /...的路径。

到目前为止,我不知道为什么它在我的本地计算机上运行但无法在AWS上运行

1 个答案:

答案 0 :(得分:0)

fs之类的相对mappath路径将从current working directory解析,但不保证一致。它在本地工作,因为您正在使用/root作为工作目录执行应用程序。

这就是为什么你要找到使用__dirname的建议,用于解析相对于当前脚本的路径。

尽管如此,您还是希望../使用resolve parent directories

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

这假定当前脚本位于,__dirname/root/maps/routes/api,因为目录树中的缩进建议。