在app.js之外,Node.js需要失败

时间:2013-04-14 21:54:54

标签: node.js path require

我正在尝试从另一个模块./routes/exchange.js加载自定义模块./routes/socketRouter.js。它抛出

module.js:340
throw err;
      ^
Error: Cannot find module './routes/exchange'

从app.js(在根目录中)完成的同一个调用require('./routes/exchange)是成功的!

是否存在一个限制,阻止调用需要在app.js以外的其他地方?

我已尝试过许多不同的路径,例如: require('./routes/exchange.js')require('exchange')require('exchange.js')

谢谢!

2 个答案:

答案 0 :(得分:0)

require('./exchange')

这会将模块加载到与您需要的源模块相同的目录中。

require('exchange')只会加载模块,如果它位于基础node_modules目录中。

答案 1 :(得分:0)

当需要来自客户模块和文件时,您可以提供文件的相对路径。所以使用以下结构

./my-app
  app.js
  routes/
    exchange.js
    socketRouter.js
  some-folder/
    some-file.js

现在,当exchange.js包含app.js时,你会使用require('./routes/exchange')当你从socketRouter.js中包含它时,你会把它放在同一个文件夹中,所以require('./excahnge')

为了清楚起见,当想要包含some-file.js中的exchange.js时,您会将其引用为require('../routes/exchnage')

(注意,当通过require调用它时,.js扩展名是可选的,如果exchange是一个文件夹,那么它将从该文件夹加载index.js文件,参见http://nodejs.org/api/modules.html#modules_file_moduleshttp://nodejs.org/api/modules.html#modules_folders_as_modules)< / p>