Express.js MVC 应用路由渲染函数未定义

Express.js MVC app routing render function undefined

我正在研究 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);

被调用,它出错了,因为索引是 undefined/an 空对象。我无法确定为什么会这样。

如果我使用 module.exports 导出控制器 .js 文件的应用程序端,服务器将启动,但稍后会出现其他错误。我已经尝试了我能想到的一切来解决这个问题,包括完全复制粘贴书中的示例。我真的很想能够跟着这本书,直到我掌握这个开发堆栈。感谢任何帮助。

显然这个模块:

require ('../controllers/index.server.controller')

未导出定义任何 render 属性 / 函数的对象。

确保此模块导出具有此签名的 render 函数:

...
module.exports = { render: function(req, res, next) {...}, ... }
...