[Hapi.js] Extending the request with lifecycle events

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Hapi.js] Extending the request with lifecycle events相关的知识,希望对你有一定的参考价值。

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.

以上是关于[Hapi.js] Extending the request with lifecycle events的主要内容,如果未能解决你的问题,请参考以下文章

Extending the Yahoo! Streaming Benchmark

Extending the UCD-SNMP(net-snmp) agent

如何在 hapi.js 上的路径上使用 hapi-auth-jwt2 身份验证?

hapi.js - 404 路由 VS 静态文件路由

如何使用 dropzone.js 和 hapi.js 上传图片

Hapi.js —— Node.js 服务器端应用开发框架