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 に答える