为什么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相当陌生,所以可能会误解模块的工作原理。

在此先感谢!

+0

你有没有试过'require('./ requester/requests.js');'? – Bergi 2014-10-05 22:53:50

+0

你确定这条路是对的吗?在位于与main相同的目录中的请求者子目录中? – akaphenom 2014-10-05 23:04:49

+0

@Bergi是的,我有。 – 2014-10-06 00:10:07

我可以重新创建错误的唯一方法是如果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 

祝你好运解决你的问题。

+0

是啊。这是我期望他遇到的问题类型。它也可能是一个文件权限问题 - 不是? – akaphenom 2014-10-06 11:15:20

+0

@akaphenom如果这是一个文件权限问题,你会得到一个不同的错误,我相信。我将用测试用例编辑我的帖子,以解决权限问题。 – thtsigma 2014-10-06 14:32:52

+0

@akaphenom其实,在进一步寻找。如果文件夹本身有权限问题,那么你会得到同样的错误。 – thtsigma 2014-10-06 14:42:39