{"id":22729508,"url":"https://github.com/nasa8x/hapi-bodyparser","last_synced_at":"2025-03-30T00:44:34.515Z","repository":{"id":19368605,"uuid":"86893797","full_name":"nasa8x/hapi-bodyparser","owner":"nasa8x","description":"Hapi.js body parsing plugin","archived":false,"fork":false,"pushed_at":"2023-01-04T21:37:08.000Z","size":568,"stargazers_count":0,"open_issues_count":21,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-04-14T19:53:58.932Z","etag":null,"topics":["body-parser","hapi","hapi-plugin","hapijs","javascript","node","node-js","nodejs"],"latest_commit_sha":null,"homepage":"https://morioh.com/topic/node-js","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nasa8x.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-04-01T07:30:09.000Z","updated_at":"2019-11-12T01:38:15.000Z","dependencies_parsed_at":"2023-01-13T20:20:07.384Z","dependency_job_id":null,"html_url":"https://github.com/nasa8x/hapi-bodyparser","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nasa8x%2Fhapi-bodyparser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nasa8x%2Fhapi-bodyparser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nasa8x%2Fhapi-bodyparser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nasa8x%2Fhapi-bodyparser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nasa8x","download_url":"https://codeload.github.com/nasa8x/hapi-bodyparser/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246262489,"owners_count":20749171,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["body-parser","hapi","hapi-plugin","hapijs","javascript","node","node-js","nodejs"],"created_at":"2024-12-10T18:10:22.932Z","updated_at":"2025-03-30T00:44:34.496Z","avatar_url":"https://github.com/nasa8x.png","language":"JavaScript","readme":"# hapi-bodyparser\n\nHapi.js body parsing plugin support merge querystring, sub objects and sanitizer.\n\nParse incoming request bodies in a plugin before your handlers, available under the request.payload (body: true --\u003e request.body) property.\n\n### If you don't know Node.js \n\n[Node.js Tutorial for Beginners in 2020](https://morioh.com/p/0907cef2141c)\n\n[How To Build a Blog with Nest.js, MongoDB, and Vue.js](https://morioh.com/p/74ffc8a798bb)\n\n[Machine Learning In Node.js With TensorFlow.js](https://morioh.com/p/a517bc403340)\n\n```js\nnpm install hapi-bodyparser --save\n```\n\n```js\n// Not set if you want default options\noptions: {\n    // parser options use qs.parse(value, options)\n    parser: { allowDots: true, strictNullHandling: true },\n    sanitizer: {\n        trim: true, // remove first || end white space of String\n        stripNullorEmpty: true // remove property when Null or Empty\n    },        \n    merge: false, // merge querystring into body\n    body: false // If false: request.payload is default parsed | if true request.body is parsed\n}\n\n```\n\n```js\nvar Hapi = require('hapi');\n\nvar server = new Hapi.Server();\nserver.connection({ port: 8080, host: 'localhost' });\n\nserver.register([{\n    register: require('hapi-bodyparser'),\n    options: {\n        // parser: { allowDots: true, strictNullHandling: true },\n        // sanitizer: {\n        //     trim: true,\n        //     stripNullorEmpty: true \n        // },\n        // merge: false, \n        // body: false \n    }\n}], function (err) {\n    // Insert your preferred error handling here...\n});\n\n```\n\nOptions can be configured on a route via the `body` plugin object.\n\n```js\nserver.route({\n  method: 'POST',\n  path: '/api/post/fetch',\n  options: {\n    plugins: {\n      body: { merge: false, sanitizer: { stripNullorEmpty: false } }\n    },\n    handler: function (request, reply) {\n      reply(request.payload);\n    }\n  }\n});\n```\n\nParsing sub object for validate dynamic object keys name\n```js\nserver.route({\n        method: 'POST',\n        path: '/api/post/fetch',\n        options: {\n\n            auth: {\n                strategy: 'session',\n                mode: 'try'\n            },\n\n            validate: {\n                payload: {\n                    limit: Joi.number(),\n                    offset: Joi.number(),                                       \n                    sort: Joi.object().pattern(/.*/, Joi.alternatives().try(Joi.number(), Joi.boolean(), Joi.string())),                   \n                    search: Joi.string().allow('')\n                }\n            },            \n\n            handler: (request, reply) =\u003e {\n                var _uid = request.auth.credentials._id;\n                var _limit = request.payload.limit;\n                var _offset = request.payload.offset;\n                var _sort = request.payload.sort; \n                var _kwd = request.payload.search;\n                var _condition = [{ _uid: _uid }];\n\n                if(_kwd.length\u003e0){\n                    _condition.push({\n                        $or: [\n                            { tl: new RegExp(_kwd, \"ig\") },\n                            { desc: new RegExp(_kwd, \"ig\") }                            \n                        ]\n                    })\n                }\n                             \n\n                Post.paginate({ $and: _condition }, {\n                    offset: _offset,\n                    limit: _limit,                    \n                    sort: _sort\n                },\n                    function (err, result) {\n\n                        if (result) {\n                            reply({\n                                total: result.total,\n                                rows: result.docs\n                            });\n                        } else {\n                            reply({ total: 0, rows: [] });\n                        }\n\n                    });\n\n            }\n        }\n});\n```\n\nWith option `merge: true`, merge querystring into payload (body).\n\n```js\nserver.route({\n  method: 'POST',\n  path: '/api/post/fetch?abc=1',\n  options: {\n    plugins: {\n      body: { merge: true }\n    },\n    handler: function (request, reply) {\n      reply(request.payload);\n      // return {abc: 1, ...}\n    }\n  }\n});\n```\n\nOption sanitizer help clean object properties.\n\n```js\n// with default options: trim: true and stripNullorEmpty: true\n{\n    a: '  Hello  ',\n    b: '',\n    c: null,\n    d: 'World   ',\n    e: {\n        a: null,\n        b: 1,\n        c:''\n    }\n}\n// after sanitize\n{\n    a: 'Hello',\n    d: 'World',\n    e: {\n        b: 1\n    }\n}\n\n``` ","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnasa8x%2Fhapi-bodyparser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnasa8x%2Fhapi-bodyparser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnasa8x%2Fhapi-bodyparser/lists"}