Node.js-Kraken.js-路由器回调错误



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

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

因此,在我的config.json中,我将路由器设置为:"路由器":{"模块":{"arguments":[{"index":"path:./routes"}]}}

我的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.,错误消失了(这似乎是一件好事(,但我随后告诉我路由不链接到任何文件。。。

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

我在这里找到了答案。我不能在一个require语句中要求多个文件。所以我添加了一个controllers/controllers.js文件,其中包含:

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

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

现在我必须找到为什么路线有效,但页面是空的。。。不管怎样,这是另一个问题。Thx Kilian。

最新更新