【问题标题】:Node.js - Kraken.js - Error in router callbacksNode.js - Kraken.js - 路由器回调错误
【发布时间】:2014-08-08 14:55:05
【问题描述】:

我被困在一个应该简单的问题上几个小时了,类似的问题对我没有帮助 =/

我正在使用 kraken.js,因为它具有我需要的所有开箱即用功能,而且我的路线有问题:Error: Route.get() requires callback functions but got a [object Undefined]

所以,在我的config.json 中,我将路由器设置为: “路由器”:{ “模块”: { “参数”:[{“索引”:“路径:./路由”}] } }

我的routes.js 看起来像这样:

'use strict';

module.exports = function (router) {
  var controllers = require('./controllers');

  router.get('/', controllers.index);
  //router.get('/offer', controllers.offer);
  //router.get('/specifications', controllers.specifications);

  router.get('/setLocale/:locale', function (req, res) {
    res.cookie('locale', req.params.locale);
    res.redirect('/');
  });
};

我有这个架构:

[ROOT]
  |-> controllers
      |-> index.js
      |-> offer.js
      |-> specifications.js
  |-> routes.js
  |-> models
      |-> index.js
      |-> offer.js
      |-> specifications.js
  |-> [some other folders and files]

这是我的控制器:

index.js:

'use strict';

var IndexModel = require('../models/index');

exports.index = function(req, res) {
  var model = new IndexModel();
  res.render('index', model);
};

offer.js:

'use strict';

  var OfferModel = require('../models/offer');

  exports.offer = function(req, res) {
    var model = new OfferModel();
    res.render('offer', model);
};

规范.js:

'use strict';

var SpecificationsModel = require('../models/specifications');

exports.specifications = function(req, res) {
  var model = new SpecificationsModel();
  res.render('specifications', model);
};

如您所见,这 3 个控制器遵循相同的格式,但只有 controller.index 回调有效。当我取消注释 controller.[order|specifications] 行时,它给我一个调用未定义对象而不是函数的错误,为什么会这样?

另外,我尝试在我的控制器中的每次导出之前添加module.,并且错误消失了(这似乎是一件好事),但我告诉我路由没有链接到任何文件......

如果有人能帮忙,那就太好了。

【问题讨论】:

  • 如果将 routes.js 中的第 4 行更改为 var controllers = require('./controllers')();(末尾有括号),是否会有所不同?
  • 返回错误就行了:uncaughtException object is not a function. TypeError: object is not a function.

标签: express callback routes kraken.js


【解决方案1】:

我找到了答案here。我不能只在一个要求语句中要求多个文件。 所以我添加了一个controllers/controllers.js 文件:

'use strict';

module.exports= {
  index : require('./index'),
  offer : require('./offer'),
  setLocale : require('./setLocale'),
  specifications: require('./specifications')
};

在我的routes.js 中,我可以通过要求./controllers/controllers.js 来加载它们

现在我必须找出为什么路线有效但页面是空的......无论如何,这是另一个问题。谢谢 Kilian。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2015-09-20
    • 2020-06-28
    • 1970-01-01
    • 2017-03-06
    • 2017-09-25
    相关资源
    最近更新 更多