Simple Error: Express 3 -> 4. Moving a controller and requesting index "Route.get() requires callback functions but got a [object Undefined]"
Simple Error: Express 3 -> 4. Moving a controller and requesting index "Route.get() requires callback functions but got a [object Undefined]"
您好,我见过类似的错误,但是 none 其中的错误适用于这种情况。我正在阅读 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' }) 上产生 "Error: Route.get() requires callback functions but got a [object Undefined]";行。
在这里已经有好几个小时了。非常感谢帮助。
错误可能是由 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.js
应该导出它定义的 Router
:
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'));
您好,我见过类似的错误,但是 none 其中的错误适用于这种情况。我正在阅读 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' }) 上产生 "Error: Route.get() requires callback functions but got a [object Undefined]";行。
在这里已经有好几个小时了。非常感谢帮助。
错误可能是由 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.js
应该导出它定义的 Router
:
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'));