为什么Node无法解析这个文件名?
问题描述:
我在建立节点的应用程序中收到以下错误。为什么Node无法解析这个文件名?
Error: Cannot find module '/Users/bryce/repos/wudu/requester'
当我尝试从该文件访问模块(请求者/ requests.js),就会出现此(main.js):
main.js
var r = require('./requester/requests');
r.updateDB();
我对于错误消息为什么会切断文件名感到困惑,并且指向包含该文件的目录。
我也感到困惑,因为当我尝试自行执行文件(requester/requests.js)时,我得到相同的错误。
这是文件中包含的简化版本,如果有帮助的话。
请求者/ requests.js
var $ = require('cheerio');
var request = require('request');
var q = require('q');
var dbStatus = require('./dbStatus');
function updateDB() {
// n/a
}
module.exports = {
updateDB: updateDB
};
应用程序的文件夹中包含main.js和请求者两者。所以我相当肯定我的路径声明是正确的。但是我对Node相当陌生,所以可能会误解模块的工作原理。
在此先感谢!
答
我可以重新创建错误的唯一方法是如果main.js与requestor.js位于同一目录中。为了使您需要调用正常工作,你的目录结构应该像这样:
[email protected]:~/node_test$ tree
.
├── main.js
└── requester
└── requests.js
1 directory, 2 files
如果你的目录看起来是这样的:
[email protected]:~/node_test$ tree
.
└── requester
└── main.js
└── requests.js
或像这样:
[email protected]:~/node_test$ tree
.
└── main.js
└── requests.js
那么你需要修改你的main.js,看起来像这样:
var r = require('./requests');
r.updateDB();
希望这可以解决您的问题,如果不是的话,我会很乐意再看看它。如果你可以用你的目录的树打印输出来编辑你的OP,那会很有帮助。
----- -----编辑
有人问,如果一个文件权限错误可能会导致此相同类型的问题。这里有一个例子:
@computer:~/node_test$ sudo chown root:root requester/requests.js
@computer:~/node_test$ sudo chmod 700 requester/requests.js
@computer:~/node_test$ node main.js
fs.js:338
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
^
Error: EACCES, permission denied './node_test/requester/requests.js'
所以在文件本身有它抛出不同的错误权限问题的话;但是,如果我们的文件夹只为root访问,那么你就会有这样的事情:
@computer:~/node_test$ sudo chown root:root requester/
@computer:~/node_test$ sudo chmod 700 requester/
@computer:~/node_test$ node main.js
module.js:340
throw err;
^
Error: Cannot find module './requester/requests'
因此,作为@akaphenom正确地指出,你可能与./requester文件夹的权限问题。您可以通过以下方式查看权限:
@computer:~/node_test$ ls -l
祝你好运解决你的问题。
你有没有试过'require('./ requester/requests.js');'? – Bergi 2014-10-05 22:53:50
你确定这条路是对的吗?在位于与main相同的目录中的请求者子目录中? – akaphenom 2014-10-05 23:04:49
@Bergi是的,我有。 – 2014-10-06 00:10:07