[英]NodeJS cannot find custom module
我正在嘗試將模塊導出到我的路由文件。
我的文件樹像
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
因為expressjs
的示例顯示:(express route是一個文件夾)
var routes = require('./routes');
並像加載它
app.get('/', routes.index);
沒有錯誤。 而./routes
是一個文件夾。 我只是遵循相同的原則。
如果您嘗試require
一個目錄,則它期望該目錄中有一個index.js
文件。 否則,您僅需要簡單的單個文件: require('./controllers/users')
。 或者,您可以在controllers
目錄中創建index.js
文件,並添加以下內容:
module.exports.users = require('./users');
module.exports.posts = require('./posts');
然后導入: var c = require('./controllers');
。 然后,您可以通過c.users
和c.posts
使用它們。
您必須了解require()的工作方式。
在您的情況下,它找不到名為controller.js的文件,因此假定它是目錄,然后專門搜索index.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是文件,則 解析X / package.json,然后查找“ main”字段。 b。 令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
創建:myapp / routes
創建:myapp / routes / index.js
花一些時間來真正閱讀模塊是如何工作的,就是花了很多時間。 在這里閱讀
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.