gpt4 book ai didi

node.js - 简单错误 : Express 3 -> 4. 移动 Controller 并请求索引 "Route.get() requires callback functions but got a [object Undefined]"

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:07 25 4
gpt4 key购买 nike

您好,我见过类似的错误,但它们都不适用于这种情况。我正在阅读《Getting Mean》一书,并将 Express 3 上的所有类(class)应用到 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' }); 上生成“错误:Route.get() 需要回调函数,但得到了 [对象未定义]”;线。

已经在这几个小时了。非常感谢您的帮助。

最佳答案

该错误可能是由 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'));

关于node.js - 简单错误 : Express 3 -> 4. 移动 Controller 并请求索引 "Route.get() requires callback functions but got a [object Undefined]",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28374314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com