在 vps 上使用 fs.readdir returns ENOENT,但不在本地主机上

Using fs.readdir returns ENOENT on vps, but not on localhost

所以我正在处理一个节点 js 项目,我想从一个目录加载所有文件。一切都在本地主机上运行,​​但是当我将它推送到服务器时,它会抛出这个错误:

Error: ENOENT, readdir './maps/'

错误在这里(app.js):

        var dir='./maps/';
        fs.readdir(dir,function(err,files){
            if (err) throw err;
            files.forEach(function(file){
                fs.readFile(dir+file,'utf-8',function(err,data){
                    if (err) throw err;                        
                    //code..
                    }
                });
            });
        });

我仔细检查了服务器上的目录树,确实和本地主机上的一样,所以我不知道这里发生了什么。

目录树如下所示(在服务器和本地主机上):

src
    app.js
    maps
        map1.json
        map2.json
    routes
        index.js
        and so on...

服务器是亚马逊 linux 上的 运行。

当您从本地而非远程的不同目录启动服务器时,您通常 运行 会遇到这种情况。

如果您 运行 node app.js 来自 $\src\> 本地,而亚马逊实际上 运行 s node src\app.js,例如,您的 none相对目录将正确解析。一种简单的检查方法是在 app.js 的开头记录 process.cwd() 报告的内容,这样您就知道它实际在哪个目录中执行。然后您甚至可以 - 如果需要 - 使用 process.chdir() 导航 app.js 脚本以确保您所有的相关目录都可以使用

之类的东西
var path = require("path");
process.chdir(path.dirname(__filename));

将使用 "this script" 的位置,这是 Nodejs 中的全局 __filename(顺便说一句,这是一个绝对文件位置),找到它所属的目录(通过 path模块),然后将活动目录更改为与当前文件所在的目录相同。