2015-04-24 75 views
1

在Hapi插件中有沒有辦法訪問請求(是否存在關聯的路由)?如何訪問插件中的請求?

我知道我可以在我的插件中訪問server,但似乎如果我嘗試在插件的上下文中設置任何事件處理程序來獲取請求,它們從不會觸發。

例如,預期了以下工作:

var Hapi = require('hapi');  
var server = new Hapi.Server();  

server.connection({port: 3000}); 

server.start(function() { 
    console.log('hapi server started @ ', server.info.uri); 
}); 

server.ext('onRequest', function (request, reply) { 
    console.log(request); 
    return reply.continue(); 
}); 

server.route({           
    path: '/',           
    method: 'GET',    
    handler: function (request, reply) {  
    reply({yo: 'noid'});     
    server.log(['trace'], request);  
    }          
}); 

如果我嘗試插件的範圍內同樣的事情,沒有任何反應:

// Hapi App 

var Hapi = require('hapi');  
var server = new Hapi.Server();  

server.register({ register: require('samplePlugin') }, function (error) { 
    if(error) { 
    console.log('failed to load plugin:', error); 
    } 
}); 

server.connection({port: 3000}); 

server.start(function() { 
    console.log('hapi server started @ ', server.info.uri); 
}); 

server.route({           
    path: '/',           
    method: 'GET',    
    handler: function (request, reply) {  
    reply({yo: 'noid'});     
    server.log(['trace'], request);  
    }          
}); 

// Hapi Plugin 
var samplePlugin = function (server, options, next) {               
    'use strict';                       

    server.ext('onRequest', function (request, reply) {             
    console.log(request);                    
    return reply.continue();                   
    });                         

    next();                        
};                          

exports.register = logger;                    
exports.register.attributes = { pkg: require('./package.json') }; 

任何幫助將非常感激。我也很樂意聽到其他方法。也許我正走向錯誤的道路(我是Hapi的新手)。謝謝閱讀。

回答

2

您的代碼的問題是server.register()是異步的,但是您在服務器回調之外啓動服務器。你需要確保服務器僅在註冊插件時啓動。

var Hapi = require('hapi'); 
var server = new Hapi.Server(); 

server.connection({port: 3000}); 

server.route({ 
    path: '/', 
    method: 'GET', 
    handler: function (request, reply) { 
    reply({yo: 'noid'}); 
    server.log(['trace'], request); 
    } 
}); 

server.register({ register: require('./plugin') }, function (error) { 
    if(error) { 
    console.log('failed to load plugin:', error); 
    } 

    server.start(function() { 
    console.log('hapi server started @ ', server.info.uri); 
    }); 
}); 
+0

我們如何可以訪問onRequest server.ext request.payload我總是得到request.payload爲空:您可以通過server.start()部分遷入的server.register()回調很容易地解決你的代碼 –