2015-04-24 34 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()回调很容易地解决你的代码 –