[Hapi.js] Extending the request with lifecycle events
2016-02-29 03:35
561 查看
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.
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.
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.
相关文章推荐
- [Hapi.js] POST and PUT request payloads
- iOS开发-UIActionSheet和UIAlertController
- EasyUI文档学习心得
- RESTful Request:GET/PUT/DELETE/POST/HEAD/OPTIONS
- java.lang.Exception: Exception in sending Request :: null
- Android--Handler,Looper,MessageQueue的关系
- WebSphere Message Queue介绍
- 设置UIImage的渲染模式:UIImage.renderingMode
- 获取手机信息(UIDevice、NSBundle、NSLocale)
- 使用Arduino录制与播放遥控器的红外信号
- 笔记:SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <1MB model size
- UIView属性clipsTobounds的应用
- Jmeter性能测试,MySQL JDBC request
- UIGestureRecognizer
- EasyUI Combobox 级联查询
- npm package.js Guide
- UIControl 的基本使用方法和 Target-Action 机制
- microservice-demo maven build 时报错(A required class is missing: org/codehaus/plexus/util/Scanner)
- UITableview代理方法与Viewcontroller分离
- Dynamic web module 3.0 requires Java 1.6 or newer解决办法