如何在hapi.js中对路由处理程序进行分组

时间:2017-04-16 16:39:25

标签: node.js hapijs

在我的hapi.js应用程序中,我为一组路由创建了一个插件。插件包含在索引文件中以定义路由,以及用于定义处理程序的控制器文件。以下代码是应用程序的起点。

index.js

exports.register = function (server, options, next) {
  server.route({
    method: 'GET',
    path: '/coins',
    handler: require('./getCoins')
  });

  next();
};

getCoins.js

module.exports = function (request, reply) {
  reply('get all coins called');
};

这可以按预期工作。当我尝试将多个处理程序组合到一个文件中时,问题就出现了。来自两个文件(index.jscontroller.js)的违规代码如下:

index.js

var controller = require('./controller.js');

exports.register = function (server, options, next) {
  server.route({
    method: 'GET',
    path: '/coins',
    handler: controller.getAllCoins()
  });

  server.route({
    method: 'POST',
    path: '/coins',
    handler: controller.createCoin()
  });

  next();
};

controller.js

var exports = module.exports = {};

exports.getAllCoins = function (request, reply) {
  reply('get all coins called');
};

exports.createCoin = function(request, reply) {
  reply('create new coin called');
};

以这种方式构建我的代码时,我最终得到了ERROR: reply is not a function。看来回复对象根本没有实例化。我可以在一个单独的文件中定义每个处理程序,这可以工作,但如果可以的话,我宁愿将处理程序保存在同一个文件中。我在这里缺少什么?

修改 添加console.log(controller);

的内容
{ 
  getAllCoins: [Function],
  createCoin: [Function],
  getCoin: [Function],
  updateCoin: [Function],
  deleteCoin: [Function] 
}

1 个答案:

答案 0 :(得分:0)

事实证明handler: controller.getAllCoins()文件中的index.js行期望命名变量,而不是函数调用。将该行更改为handler: controller.getAllCoins解决了问题。