body-parser-xml
    DefinitelyTyped icon, indicating that this package has TypeScript declarations provided by the separate @types/body-parser-xml package

    2.0.3 • Public • Published

    XML Body Parser

    Adds XML parsing to the body-parser library, so you can convert incoming XML data into a JSON representation.

    This is really useful if you want to deal with plain old JavaScript objects, but you need to interface with XML APIs.

    Build Status npm version npm downloads per week Dependency Status devDependency Status

    Installation

    npm install express body-parser body-parser-xml
    

    Usage

    This library adds an xml method to the body-parser object.

    Initialise like so:

    const bodyParser = require('body-parser');
    require('body-parser-xml')(bodyParser);

    Once initialised, you can use it just like any other body-parser middleware:

    const app = require('express')();
    app.use(bodyParser.xml());

    This will parse any XML-based request and place it as a JavaScript object on req.body for your route handlers to use.

    An XML-based request is determined by the value of the Content-Type header. By default, any Content-Type header ending in /xml or +xml will be parsed as XML. For example, the following Content-Types will all match:

    • text/xml
    • application/xml
    • application/rss+xml

    If you need to match against a custom Content-Type header, pass in the type to match as an option (see below).

    Options

    You can also pass in options:

    app.use(bodyParser.xml(options));

    The options object accepts any of the following keys:

    defaultCharset

    Specify the default character set for the text content if the charset is not specified in the Content-Type header of the request. Defaults to utf-8.

    inflate

    When set to true, then deflated (compressed) bodies will be inflated; when false, deflated bodies are rejected. Defaults to true.

    limit

    Controls the maximum request body size. If this is a number, then the value specifies the number of bytes; if it is a string, the value is passed to the bytes library for parsing. Defaults to '100kb'.

    type

    The type option is used to determine what media type the middleware will parse. This option can be a string, array of strings, or a function. If not a function, type option is passed directly to the type-is library and this can be an extension name (like xml), a mime type (like application/xml), or a mime type with a wildcard (like / or _/xml). If a function, the type option is called as fn(req) and the request is parsed if it returns a truthy value. Defaults to ['_/xml', '+xml'].

    verify

    The verify option, if supplied, is called as verify(req, res, buf, encoding), where buf is a Buffer of the raw request body and encoding is the encoding of the request. The parsing can be aborted by throwing an error.

    xmlParseOptions

    This option controls the behaviour of the XML parser. You can pass any option that is supported by the xml2js library: see here for a list of these options.

    Example

    const express = require('express');
    const bodyParser = require('body-parser');
    
    require('body-parser-xml')(bodyParser);
    
    const app = express();
    app.use(
      bodyParser.xml({
        limit: '1MB', // Reject payload bigger than 1 MB
        xmlParseOptions: {
          normalize: true, // Trim whitespace inside text nodes
          normalizeTags: true, // Transform tags to lowercase
          explicitArray: false, // Only put nodes in array if >1
        },
      }),
    );
    
    app.post('/users', function (req, res, body) {
      // Any request with an XML payload will be parsed
      // and a JavaScript object produced on req.body
      // corresponding to the request payload.
      console.log(req.body);
      res.status(200).end();
    });

    Motivation

    This library was born out of a frustration that express-xml-bodyparser, the most popular XML-parsing library for express, doesn't support the regular body-parser options - in particular, limiting the payload size.

    This library was written to use body-parser's text parser under the hood, and then passes the parsed string into the XML parser. We can therefore take advantage of body-parser's regular options, and support limiting the payload size, amongst other things.

    License

    MIT

    Install

    npm i body-parser-xml

    DownloadsWeekly Downloads

    16,198

    Version

    2.0.3

    License

    MIT

    Unpacked Size

    15.9 kB

    Total Files

    10

    Last publish

    Collaborators

    • fiznool