我正在使用我在节点中构建的应用程序收到以下错误。
Error: Cannot find module '/Users/bryce/repos/wudu/requester'
当我尝试从此文件(main.js)访问模块(requester / requests.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
};
app的文件夹包含main.js和requester。所以我很确定我的路径声明是正确的。但我对Node很新,所以我可能误解了模块的工作原理。
提前致谢!
答案 0 :(得分:2)
我可以重新创建错误的唯一方法是main.js与requestor.js位于同一目录中。为了使您的require调用正常工作,您的目录结构应如下所示:
computer@computer:~/node_test$ tree
.
├── main.js
└── requester
└── requests.js
1 directory, 2 files
如果您的目录如下所示:
computer@computer:~/node_test$ tree
.
└── requester
└── main.js
└── requests.js
或者像这样:
computer@computer:~/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
祝你好运解决问题。