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.

  • 相关阅读:
    普联的路由器TL-WR842N和TL-WR845N还有 TL-WR847N哪一个更好,我是家用
    z
    EF架构~XMLRepository仓储的实现~续(XAttribute方式)
    缓存篇(Cache)~第三回 HttpModule实现网页的文件级缓存
    爱上MVC系列~带扩展名的路由失效问题
    开发人员应该对IIS理论层的知识了解的多一些~第四讲 HttpModule中的几大事件
    缓存篇(Cache)~第二回 使用static静态成员实现服务器端缓存(导航面包屑)~续
    一分钟对我们的重要意义
    VS2010添加默认路径,库以及Lib
    Android中振动器(Vibrator)的使用
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5226228.html
Copyright © 2011-2022 走看看