簡體   English   中英

NodeJS找不到自定義模塊

[英]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.usersc.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)

  1. 如果X / package.json是文件,則 解析X / package.json,然后查找“ main”字段。 b。 令M = X +(json主字段)c。 LOAD_AS_FILE(M)
  2. 如果X / index.js是文件,則將X / index.js加載為JavaScript文本。
  3. 如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM