在我的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.js
,controller.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]
}
答案 0 :(得分:0)
事实证明handler: controller.getAllCoins()
文件中的index.js
行期望命名变量,而不是函数调用。将该行更改为handler: controller.getAllCoins
解决了问题。