使用fs.readdir在vps上返回ENOENT,但在localhost上不返回

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

本文关键字:返回 但在 localhost ENOENT fs vps 使用 readdir      更新时间:2023-09-26

所以我正在处理一个node-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..
                    }
                });
            });
        });

我三次检查了服务器上的目录树,它确实和localhost上的相同,所以我不知道这里发生了什么。

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

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

服务器运行在amazonlinux上。

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

例如,如果您在本地从$'src'>运行node app.js,而Amazon实际上运行node src'app.js,那么您的任何相对目录都无法正确解析。一个简单的检查方法是在app.js开始时记录process.cwd()报告的内容,这样你就知道它实际上是在哪个目录中执行的。然后,如果你想的话,你甚至可以使用process.chdir()来导航app.js脚本,以确保所有相关的目录都能使用之类的东西工作

var path = require("path");
process.chdir(path.dirname(__filename));

它将使用"此脚本"的位置,即Nodejs中的全局__filename(这是一个绝对的文件位置btw),找到其拥有的目录(通过path模块),然后将活动目录更改为与当前文件所在的目录相同。

相关文章: