0

我正在重构我的 server.js 文件并尝试合并 MVC 模式。我在尝试从我的 routes.js 访问我的控制器时遇到了问题。我已经尝试了几乎所有我能想到的绝对和相对路径的变体,但我必须遗漏一些东西。这是我的目录结构: 在此处输入图像描述

从我的 routes.js 中,这是我的代码:

module.exports = function ( app, passport, auth ) {
    var Clients = require('controllers/clients');
    app.get('/clients', Clients.list);
}

我认为这无关紧要,但这是我的客户控制器:

var mongoose = require('mongoose')
    , Client  = mongoose.model('Client');

exports.list = function( req, res ) {
    Client.find( function( err, clients ) {
        res.renderPjax('clients/list', { clients: clients, user: req.user });
    });
}

这是我尝试从路由访问我的控制器时遇到的错误:

module.js:340
    throw err;
          ^
Error: Cannot find module 'controllers/clients'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at module.exports (/Users/sm/Desktop/express3-mongoose-rememberme/app/routes.js:5:16)
    at Object.<anonymous> (/Users/sm/Desktop/express3-mongoose-rememberme/server.js:334:24)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)

我敢肯定,我看得太简单了。如何从我的路由访问我的控制器?

4

2 回答 2

2

要要求不是单独的包(不在 中node_modules)的东西,您需要使用明确的相对路径:

require('./controllers/clients')

有关详细信息,请参阅文档

于 2013-04-23T15:06:37.987 回答
0

本地模块

require(...)采用本地模块的相对路径

require('./controllers/clients')

已安装的模块

对于通过 安装的模块npm install -S foo,使用语法

require('foo')
于 2013-04-23T15:08:07.053 回答