NodeJS找不到自定义模块
我正在试图导出一个模块到我的路线文件。
我的文件树就像
routes.js app.js controllers/users.js posts.js
在我的app.js
我导出var route = require('./routes');
这是有效的。 现在我的routes.js
我试图导出require('./controllers');
。
但它一直告诉我,它cannot find module controllers
。
这样做的作品:
require('./controllers/users')
但是我试图按照expressjs样本初始项目的格式。 而且它正在窃听我,因为expressjs
的例子显示:(快递路线是一个文件夹)
var routes = require('./routes');
并加载它
app.get('/', routes.index);
没有错误。 而./routes
是一个文件夹。 我只是遵循同样的原则。
如果你试图require
一个目录,它期望那个目录中有一个index.js
文件。 否则,你只需要单独的文件: require('./controllers/users')
。 或者,您可以在controllers
目录中创build一个index.js
文件,并添加以下内容:
module.exports.users = require('./users'); module.exports.posts = require('./posts');
然后导入: var c = require('./controllers');
。 然后您可以通过c.users
和c.posts
使用它们。
你必须明白require()是如何工作的。
在你的情况下,它无法find一个名为controller.js的文件,所以它假设它是一个目录,然后具体searchindex.js
。 这就是为什么它在快速示例中起作用。
对于你的用例,你可以做这样的事情 –
var controllerPath = __dirname + '/controllers'; fs.readdirSync(controllerPath).forEach(function(file) { require(controllerPath + '/' + file); });
来自: http : //nodejs.org/api/modules.html
LOAD_AS_DIRECTORY(X)
- 如果X / package.json是一个文件, parsingX / package.json,并查找“main”字段。 湾 让M = X +(json主场)c。 LOAD_AS_FILE(M)
- 如果X / index.js是一个文件,则将X / index.js加载为JavaScript文本。 停
- 如果X / index.node是一个文件,则将X / index.node加载为二进制插件。 停
所以,如果一个目录有一个index.js,它会加载它。
现在,看@ expressjs
http://expressjs.com/guide.html
创build:myapp /路由
创build:myapp / routes / index.js
花一些时间真正阅读模块是如何工作的, 在这里阅读