繁体   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