zoukankan      html  css  js  c++  java
  • [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.

  • 相关阅读:
    【EntityFramework系列教程十,翻译】ASP.NET MVC程序中的一些高级应用
    对不含数据源的DataGridView实现自定义排序
    poj 1584 A Round Peg in a Ground Hole(叉积判断凸多边形)
    大整数运算
    poj 1408 Fishnet(计算几何)
    poj 1201 Intervals(第一道差分约束题)
    poj 2983 Is the Information Reliable?(差分约束)
    poj 2187 Beauty Contest(凸包+旋转卡壳)
    poj 2031 Building a Space Station(prim)
    poj 3007 Organize Your Train part II
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5226228.html
Copyright © 2011-2022 走看看