1

こんにちは、同様のエラーを見たことがありますが、この状況には該当しません。私は Getting Mean の本を読んでいますが、Express 3 のすべての教訓を Express 4 アプリに適用しています。

app.js 内

app.set('views', path.join(__dirname, 'app_server/views'));
//index.jade is located here and confirmed to work before moving controller
...
require('./routes')(app); 
//Instead of app.use('/', routes);

routes/index.js 内

var ctrl = require('../app_server/controllers/main');

module.exports = function (app) {
  app.get('/', ctrl.index);
}; 

app_server/controllers/main.js 内

var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
  res.render('index', { title: 'Loc8r' });
});

// /* Also tried */
// exports.index = function(req, res){
//  res.render('index', { title: 'Express' });
// }; 

アプリを実行すると、res.render('index', { title: 'Loc8r' }); ライン。

何時間もこれにいました。助けていただければ幸いです。

4

1 に答える 1

0

エラーは、次の行が原因である可能性がありますroute/index.js

app.get('/', ctrl.index);

app_server/controllers/main.js現在は を使用していますが、express.Router一致route/index.jsするように更新されていません。ctrl.indexまだ定義されていない を期待しています。

console.log(ctrl);       // {}
console.log(ctrl.index); // undefined

app_server/controllers/main.jsRouterそれが定義しているをエクスポートする必要があります:

var express = require('express');
var router = module.exports = express.Router();
//           ^^^^^^^^^^^^^^

// ...

したがって、次のミドルウェアとして使用できますroutes/index.js

module.exports = function (app) {
  app.use(require('../app_server/controllers/main'));
};

[編集] 以下の私のコメントについて:

/** app_server/controllers/main.js **/
var express = require('express');
var router = module.exports = express.Router();

// ...
/** routes/index.js **/
var express = require('express');
var router = module.exports = express.Router();

router.use(require('../app_server/controllers/main.js'));
// ...
// router.use('/area1', require('../app_server/controllers/area1.js'));
// router.use('/area2', require('../app_server/controllers/area2.js'));
/** app.js **/
// ...

app.use(require('./routes'));
于 2015-02-06T20:58:39.730 に答える