博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Hapi.js] Extending the request with lifecycle events
阅读量:7203 次
发布时间:2019-06-29

本文共 2391 字,大约阅读时间需要 7 分钟。

Instead of using middlware, hapi provides a number of points during the lifecycle of a request that you can hook-in to provide additional functionality, called "extension events". This lesson will give you an introduction to using extension events, and show how they can be used to manipulate the request or response in-flight.

 

const Hapi = require( 'hapi' )const Boom = require( 'boom' )const server = new Hapi.Server()server.connection( { port: 8000 } )server.ext( 'onRequest', ( request, reply ) => {    request.setUrl( '/' )    request.setMethod( 'GET' )    // need to call continue, the same as Express's next()    reply.continue()} )/** * After the request has gone through the router, it needs to be authenticated. OnPreAuth runs before authentication, and onPostAuth runs after. */server.ext( 'onRequest', ( request, reply ) => {    console.log( 'onRequest' )    reply.continue()} )/** * After the request has gone through the router, it needs to be authenticated. OnPreAuth runs before authentication, and onPostAuth runs after. */server.ext( 'onPreAuth', ( request, reply ) => {    console.log( 'onPreAuth' )    reply.continue()} )server.ext( 'onPostAuth', ( request, reply ) => {    console.log( 'onPostAuth' )    reply.continue()} )/** * Validation is handled next. OnPreHandler runs, then, the route itself. */server.ext( 'onPreHandler', ( request, reply ) => {    console.log( 'onPreHandler' )    reply.continue()} )/** * OnPostHandler runs after the handler. */server.ext( 'onPostHandler', ( request, reply ) => {    console.log( 'onPostHandler' )    reply.continue()} )/** * Then, the response payload is validated on pre-response runs, and the response is sent to the client. */server.ext( 'onPreResponse', ( request, reply ) => {    console.log( 'onPreResponse' )    reply.continue()} )server.route( {    method: 'GET',    path: '/',    handler: function ( request, reply ) {        console.log( 'handler' )        reply( 'hello world' )    }} )server.start( () => {} )

 

What are these extensions good for? Each extension can be used to manipulate the request or response at any point in the lifecycle. For example, in onRequest, I can force all requests to be interpreted as GETs to the route path.

To do so, I'll use request.seturl, pass in the string/, and pass the string GET to request.setmethod. Now, when I make a post request to /foo, it still hits my defined route.

转载地址:http://hrwum.baihongyu.com/

你可能感兴趣的文章
JQuery EasyUI 日期控件如何控制日期选择区间
查看>>
scrapy ImportError: No module named items
查看>>
jboss7.1.1配置jndi
查看>>
JSP里request变量列表
查看>>
#python#面向对象练手+模仿Amazon的物流追踪显示
查看>>
器者,道之所载
查看>>
谁能告诉我mybatis中使用#和$的区别?
查看>>
GCD死锁
查看>>
JVM
查看>>
通过创建一个简单的骰子游戏来探究 Python
查看>>
linux 下 C 编程和make的方法 (五:补充 怎么抓BUG)
查看>>
C、C++中关键字static的区别
查看>>
网络协议相关知识点汇总
查看>>
js数组冒泡排序
查看>>
为什么win7虚拟机只能看到2个CPU
查看>>
C语言(1)
查看>>
java.sql.SQLException: Io 异常: Got minus one fro...
查看>>
PHP处理字符串
查看>>
数据库根据键值自动判断插入还是更新的SQL
查看>>
RabbitMQ内存与磁盘管理
查看>>