【问题标题】:Express.js MVC app routing render function undefinedExpress.js MVC 应用程序路由渲染函数未定义
【发布时间】:2015-05-19 04:52:56
【问题描述】:

我正在阅读 Amos Q. Haviv 的 MEAN Web 开发教科书。一切顺利,但我在使用 Express.js 时遇到了一个错误,我似乎无法在网上找到答案。没有关于这本书的 cmets 或任何概述此错误的内容,我找不到任何有用的答案。我正在处理一个简单的索引页面:

书中使用的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);
};

Express 配置文件:

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 文件的应用程序端,服务器将启动,但稍后会出现其他错误。我已经尝试了我能想到的一切来解决这个问题,包括完全复制粘贴书中的示例。我真的很想能够跟随这本书,直到我能够掌握这个开发堆栈。任何帮助表示赞赏。

【问题讨论】:

  • 什么是../controllers/index.server.controller 以及它的render 属性?
  • 我是否可以建议使用express.router 而不是将整个应用程序传递给另一个模块?

标签: node.js express meanjs


【解决方案1】:

显然是这个模块:

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

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

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

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

【讨论】:

  • Daniel,将我的控制器中的代码简化为名称检查逻辑并将其包装在匿名导出函数中似乎让我得到了我想要的。我只是想确认一下,这是在 MEAN 堆栈应用程序中执行 MVC 架构的正确方法吗?我不明白为什么我必须像现在这样在控制器中设置路由。
猜你喜欢
  • 1970-01-01
  • 2019-04-07
  • 2019-04-25
  • 2015-07-01
  • 2017-05-15
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多