2017-04-16 56 views
0

在我的hapi.js應用程序中,我爲路由集合創建了一個插件。該插件包含用於定義路由的索引文件以及用於定義處理程序的控制器文件。以下代碼是應用程序的起點。如何在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] 
} 
+0

什麼是索引文件中控制器對象的值?使用console.log,必須是出口的一些問題 –

+0

我將結果添加到問題以保持乾淨的格式。 – ThomasNichols89

+0

很奇怪,你的代碼中有沒有使用任何箭頭函數? –

回答

0

內容原來,handler: controller.getAllCoins()線在index.js文件期待一個命名的變量,而不是一個函數調用。將該行更改爲handler: controller.getAllCoins解決了該問題。

相關問題