为什么节点无法解析此文件名?

时间:2014-10-05 22:04:47

标签: javascript node.js

我正在使用我在节点中构建的应用程序收到以下错误。

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很新,所以我可能误解了模块的工作原理。

提前致谢!

1 个答案:

答案 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

祝你好运解决问题。