快递& Node.js异常:500 TypeError:fn不是函数

时间:2016-05-17 17:07:04

标签: javascript node.js express

我使用Express创建了一个Node.js项目,并在使用自定义路由时遇到此异常。

  

500 TypeError:fn不是函数   在回调(/WallaceBot/WallaceBot/node_modules/express/lib/router/index.js:272:11)   在param(/WallaceBot/WallaceBot/node_modules/express/lib/router/index.js:246:11)   在通过(/WallaceBot/WallaceBot/node_modules/express/lib/router/index.js:253:5)   在Router._dispatch(/WallaceBot/WallaceBot/node_modules/express/lib/router/index.js:280:5)   在Object.Router.middleware [作为句柄](/WallaceBot/WallaceBot/node_modules/express/lib/router/index.js:45:10)   在下一个(/WallaceBot/WallaceBot/node_modules/express/node_modules/connect/lib/http.js:204:15)   在Object.methodOverride [作为句柄](/ WallaceBot/WallaceBot/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js:35:5)   在下一个(/WallaceBot/WallaceBot/node_modules/express/node_modules/connect/lib/http.js:204:15)   在Object.bodyParser [作为句柄](/ WallaceBot/WallaceBot/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:88:61)   在下一个(/WallaceBot/WallaceBot/node_modules/express/node_modules/connect/lib/http.js:204:15)

我通过

在app.js中声明路线
var webhook = require('./routes/webhook.js');
app.get('/', routes.index);
app.get('/webhook', webhook);

在我的webhook.js中,

/*
 * GET Webhook.
 */

exports.webhook = function(req, res){
  res.render('index', { title: 'Webhook' })
};

但是,我使用另一种方式在app.js中声明路由,比如

app.get('/webhook', function(req, res){
  res.render('index', { title: 'Webhook' })
});

我没有得到那个例外。

有人知道为什么吗?

2 个答案:

答案 0 :(得分:3)

var webhook看起来像这样:

{
  "webhook" : function(req, res) { ... }
}

所以您的路由处理程序设置如下所示:

app.get('/webhook', {
  "webhook" : function(req, res) { ... }
});

哪个是无效的,因为Express想要一个函数参数,而不是一个对象。

相反,您希望使用导出的模块对象的webhook属性:

var webhook = require('./routes/webhook.js').webhook;

答案 1 :(得分:1)

作为另一个答案的替代解决方案,您可以将webhook.js文件更改为如下所示:

/*
 * GET Webhook.
 */

exports = module.exports = function(req, res){
  res.render('index', { title: 'Webhook' })
};