koa-xml-body
Version:
koa middleware to parse xml request body
76 lines (57 loc) • 2.99 kB
Markdown
# koa-xml-body
[](https://github.com/creeperyang/koa-xml-body/actions/workflows/ci.yml)
[](https://badge.fury.io/js/koa-xml-body)
[](https://www.npmjs.com/package/koa-xml-body)
[](https://www.npmjs.com/package/koa-xml-body)
[](https://app.fossa.io/projects/git%2Bgithub.com%2Fcreeperyang%2Fkoa-xml-body?ref=badge_shield)
> Parse xml request body for Koa
## Install
[](https://nodei.co/npm/koa-xml-body/)
## Usage
```js
const koa = require('koa')
const xmlParser = require('koa-xml-body')
const app = koa()
app.use(xmlParser())
app.use(function(ctx, next) {
// the parsed body will store in this.request.body
// if nothing was parsed, body will be undefined
ctx.body = ctx.request.body
return next()
})
```
`koa-xml-body` will carefully check and set `context.request.body`, so it can **intergate** well with other body parsers such as `koa-bodyparser`:
```js
// ...
const bodyParser = require('koa-bodyparser')
// ...
app.use(xmlParser())
app.use(bodyParser())
```
**Note:**
- For `koa@2.x`, use version `2.x` or `3.x`;
- For `koa@1.x`, use `koa-xml-body@1.x`.
## Options
- **encoding**: requested encoding. Default is `utf8`. If not set, the lib will retrive it from `content-type`(such as `content-type:application/xml;charset=gb2312`).
- **limit**: limit of the body. If the body ends up being larger than this limit, a 413 error code is returned. Default is `1mb`.
- **length**: length of the body. When `content-length` is found, it will be overwritten automatically.
- **onerror**: error handler. Default is a `None`. It means it will **throws** the error. You can config it to customize the response.
- **xmlOptions**: options which will be used to parse xml. Default is `{}`. See [`xml2js Options`](https://github.com/Leonidas-from-XIV/node-xml2js#options) for details.
- **key**: A chance to redefine what the property name to use instead of the default `body (ctx.request.body)`.
```js
app.use(xmlParser({
limit: 128,
encoding: 'utf8', // lib will detect it from `content-type`
xmlOptions: {
explicitArray: false
},
key: 'xmlBody', // lib will check ctx.request.xmlBody & set parsed data to it.
onerror: (err, ctx) => {
console.error(err);
ctx.throw(err.status, err.message);
}
}))
```
## Licences
[MIT](LICENSE)
[](https://app.fossa.io/projects/git%2Bgithub.com%2Fcreeperyang%2Fkoa-xml-body?ref=badge_large)