New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

hapi-bodyparser

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

hapi-bodyparser

Hapi.js body parsing plugin

2.1.2
latest
Source
npm
Version published
Weekly downloads
11
-38.89%
Maintainers
1
Weekly downloads
 
Created
Source

hapi-bodyparser

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.

If you don't know Node.js

Node.js Tutorial for Beginners in 2020

How To Build a Blog with Nest.js, MongoDB, and Vue.js

Machine Learning In Node.js With TensorFlow.js

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',
  options: {
    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',
        options: {

            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',
  options: {
    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
    }
}

Keywords

bodyparser

FAQs

Package last updated on 12 Nov 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts