【问题标题】:Using fs.readdir returns ENOENT on vps, but not on localhost使用 fs.readdir 在 vps 上返回 ENOENT,但在 localhost 上不返回
【发布时间】:2015-03-22 08:38:09
【问题描述】:

所以我正在处理一个节点 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...

服务器在amazon linux上运行。

【问题讨论】:

  • 您是否在本地运行 node app.js$\src\>,而亚马逊实际上是否运行 node src\app.js?因为那会导致目录位置不匹配。简单检查:在 app.js 的开头记录 process.cwd() 报告的内容,这样你就知道它实际上用完了哪个目录
  • @Mike'Pomax'Kamermans 男人,爱你,想通了。万分感谢。在本地,我直接从带有 app.js 的目录和服务器上的目录启动它。已修复并且现在可以完美运行。如果需要,请发布答案。 :)
  • 完成,还有一些关于如何强制您成功的方法,将哪个目录视为活动目录。

标签: javascript node.js fs


【解决方案1】:

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

例如,如果您从 $\src\> 本地运行 node app.js,而 Amazon 实际上运行 node src\app.js,则您的相关目录都不会正确解析。一个简单的检查方法是在您的app.js 开头记录process.cwd() 报告的内容,这样您就知道它实际上是在哪个目录中执行的。然后您甚至可以(如果您愿意)使用process.chdir() 来导航应用程序.js 脚本,以确保您所有的相关目录都使用类似的东西工作

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

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

【讨论】:

    猜你喜欢
    • 2021-05-27
    • 2015-10-06
    • 1970-01-01
    • 2019-07-14
    • 2020-11-22
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多