在 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
模块),然后将活动目录更改为与当前文件所在的目录相同。
所以我正在处理一个节点 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
模块),然后将活动目录更改为与当前文件所在的目录相同。