Skip to content
Fastify plugin / module to parse XML payload / body into JS object
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
test
.bithoundrc
.codeclimate.yml
.gitignore Initial commit Feb 12, 2018
.npmignore Add coverage test Feb 13, 2018
.travis.yml
LICENSE
README.md
index.js
package-lock.json
package.json
yarn.lock Update readme and fxp version Apr 18, 2018

README.md

fastify-xml-body-parser

Fastify plugin / module to parse XML payload / body into JS object

Code Climate fastify-xml-body-parser donate button

Known Vulnerabilities NPM quality Travis ci Build Status Coverage Status bitHound Dev Dependencies bitHound Overall Score

Usage

  1. Include in package.json
$npm install fastify-xml-body-parser
#or
$yarn add fastify-xml-body-parser
  1. Then import in your code and register with fastify

Sample POST body / payload

<sample>data</sample>
const fastify = require('fastify')()

fastify.register(require('fastify-xml-body-parser'))

fastify.post('/', (req, reply) => {
  console.log(req.body.sample)//data
  reply.send(req.body)
})

fastify.listen(8000, (err) => {
  if (err) throw err
})

The sent reply would be the object:

{
  sample: 'data'
}

Options

This plugin use fast-xml-parser to parse the XML payload. So it accepts all the options supported by fast-xml-parser.

var options = {
    attributeNamePrefix : "@_",
    attrNodeName: "attr", //default is 'false'
    textNodeName : "#text",
    ignoreAttributes : true,
    ignoreNameSpace : false,
    allowBooleanAttributes : false,
    parseNodeValue : true,
    parseAttributeValue : false,
    trimValues: true,
    decodeHTMLchar: false,
    cdataTagName: "__cdata", //default is 'false'
    cdataPositionChar: "\\c",
};

const fastify = require('fastify')()

fastify.register(require('fastify-xml-body-parser'), options)

Additionaly, it supports following options

  • validate: If it is set to true, this plugin validate the payload for valid XML syntax before parsing.
  • contentType: It accepts a string or an array of content types. By default it is set to ["text/xml", "application/xml", "application/rss+xml"].

Note: I've not included body size limit to this plugin because of following reasons

  • I believe it's good to use API gateway to handle non-functional requirements, like security.
  • There are already some plugins which verifies for body length. It'll be a performance degrade if all the plugins are doing the same thing.

License

MIT License

Worth to mention

Don't forget to check my other projects

  • BigBit standard) : A standard to reprent any number in the universe in comparitively less space and without precision loss. A standard to save space to represent any text string in comparision of UTF encoding.
  • imglab : Speedup and simplify image labeling / annotation. Supports multiple formats, one click annotation, easy interface and much more. There are more than 20k images are annotated every month.
  • अनुमार्गक (anumargak) : The fastest and simple router for node js web frameworks with many unique features.
  • stubmatic : A stub server to mock behaviour of HTTP(s) / REST / SOAP services. You can also mock binary formats.
  • मुनीम (Muneem) : A webframework made for all team members.
  • शब्दावली (shabdawali) : Amazing human like typing effects beyond your imagination.
  • fast-lorem-ipsum : Generate lorem ipsum words, sentences, paragraph very quickly. Better than any generater. Works with NPM, browser, and CLI.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.