我正在研究Amos Q. Haviv的MEAN Web开发教科书。一切顺利,但我遇到了与Express.js合作的错误,我似乎无法在网上找到答案。没有关于该书或任何概述此错误的评论的评论,我找不到任何有用的答案。我正在处理一个简单的索引页面:
本书中使用的Express版本是:4.8.8 我的最新版本是:4.12.4
控制器:
var express = require('express');
var hasName = function(req, res, next) {
if (req.params.name) {
next();
} else {
res.send('What is your name?');
}
};
var sayHello = function(req, res, next) {
res.send('Hello ' + req.params.name);
};
var app = express();
app.get('/', hasName, sayHello);
app.listen(3000);
console.log('Server running at http://localhost:3000/');
路线:
module.exports = function(app) {
var index = require ('../controllers/index.server.controller');
app.get('/', index.render);
};
快速配置文件:
var express = require('express');
module.exports = function() {
var app = express();
require('../app/routes/index.server.routes')(app);
return app;
};
Server.js:
var express = require('./config/express');
var app = express();
app.listen(3000);
module.exports = app;
console.log('Server running at http://localhost:3000/');
最后,我启动服务器时出现的错误消息:
Error: Route.get() requires callback functions but got a [object Undefined]
at Route.<anonymous> (...\node_modules\express
\lib\router\route.js:170:15)
at Array.forEach (native)
at Route.(anonymous function) [as get] (...\no
de_modules\express\lib\router\route.js:166:15)
at EventEmitter.app.(anonymous function) (...\
node_modules\express\lib\application.js:465:19)
at module.exports (...\app\routes\index.server
.routes.js:3:9)
at module.exports (...\config\express.js:5:49)
at Object.<anonymous> (...\server.js:3:11)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
失败的原因似乎是
时app.get('/', index.render);
被调用,因为索引未定义/空对象而导致错误。我无法确定为什么会这样。
如果我使用module.exports导出控制器.js文件的应用程序端,则服务器将启动,但稍后将使用其他内容输出错误。我已经尝试了所有我能想到的解决这个问题的方法,包括完全复制粘贴书中的例子。我真的希望能够按照这本书,直到我能掌握这个开发堆栈。任何帮助表示赞赏。
答案 0 :(得分:0)
显然这个模块:
require ('../controllers/index.server.controller')
,
不导出定义任何render
属性/函数的对象。
确保此模块使用此签名导出render
函数:
...
module.exports = { render: function(req, res, next) {...}, ... }
...