GithubHelp home page GithubHelp logo

smarterservices / hapi-bodyparser Goto Github PK

View Code? Open in Web Editor NEW

This project forked from nasa8x/hapi-bodyparser

1.0 3.0 0.0 7 KB

Hapi.js body parsing plugin

License: MIT License

JavaScript 100.00%

hapi-bodyparser's Introduction

Hapi.js body parsing plugin support merge querystring, sub objects and sanitizer.

Parse incoming request bodies in a plugin before your handlers, available under the request.payload (body: true --> request.body) property.

Install via NPM

npm install hapi-bodyparser --save
// Not set if you want default options
options: {
    // parser options use qs.parse(value, options)
    parser: { allowDots: true, strictNullHandling: true },
    sanitizer: {
        trim: true, // remove first || end white space of String
        stripNullorEmpty: true // remove property when Null or Empty
    },        
    merge: false, // merge querystring into body
    body: false // If false: request.payload is default parsed | if true request.body is parsed
}
var Hapi = require('hapi');

var server = new Hapi.Server();
server.connection({ port: 8080, host: 'localhost' });

server.register([{
    register: require('hapi-bodyparser'),
    options: {
        // parser: { allowDots: true, strictNullHandling: true },
        // sanitizer: {
        //     trim: true,
        //     stripNullorEmpty: true 
        // },
        // merge: false, 
        // body: false 
    }
}], function (err) {
    // Insert your preferred error handling here...
});

Options can be configured on a route via the body plugin object.

server.route({
  method: 'POST',
  path: '/api/post/fetch',
  config: {
    plugins: {
      body: { merge: false, sanitizer: { stripNullorEmpty: false } }
    },
    handler: function (request, reply) {
      reply(request.payload);
    }
  }
});

Parsing sub object for validate dynamic object keys name

server.route({
        method: 'POST',
        path: '/api/post/fetch',
        config: {

            auth: {
                strategy: 'session',
                mode: 'try'
            },

            validate: {
                payload: {
                    limit: Joi.number(),
                    offset: Joi.number(),                                       
                    sort: Joi.object().pattern(/.*/, Joi.alternatives().try(Joi.number(), Joi.boolean(), Joi.string())),                   
                    search: Joi.string().allow('')
                }
            },            

            handler: (request, reply) => {
                var _uid = request.auth.credentials._id;
                var _limit = request.payload.limit;
                var _offset = request.payload.offset;
                var _sort = request.payload.sort; 
                var _kwd = request.payload.search;
                var _condition = [{ _uid: _uid }];

                if(_kwd.length>0){
                    _condition.push({
                        $or: [
                            { tl: new RegExp(_kwd, "ig") },
                            { desc: new RegExp(_kwd, "ig") }                            
                        ]
                    })
                }
                             

                Post.paginate({ $and: _condition }, {
                    offset: _offset,
                    limit: _limit,                    
                    sort: _sort
                },
                    function (err, result) {

                        if (result) {
                            reply({
                                total: result.total,
                                rows: result.docs
                            });
                        } else {
                            reply({ total: 0, rows: [] });
                        }

                    });

            }
        }
});

With option merge: true, merge querystring into payload (body).

server.route({
  method: 'POST',
  path: '/api/post/fetch?abc=1',
  config: {
    plugins: {
      body: { merge: true }
    },
    handler: function (request, reply) {
      reply(request.payload);
      // return {abc: 1, ...}
    }
  }
});

Option sanitizer help clean object properties.

// with default options: trim: true and stripNullorEmpty: true
{
    a: '  Hello  ',
    b: '',
    c: null,
    d: 'World   ',
    e: {
        a: null,
        b: 1,
        c:''
    }
}
// after sanitize
{
    a: 'Hello',
    d: 'World',
    e: {
        b: 1
    }
}

hapi-bodyparser's People

Contributors

nasa8x avatar enosisshawon avatar

Stargazers

 avatar

Watchers

Jason Fill avatar James Cloos avatar Sajjad Hossain avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.