koa-async-body

A body parser written on top of busboy for koa2.x

Usage no npm install needed!

<script type="module">
  import koaAsyncBody from 'https://cdn.skypack.dev/koa-async-body';
</script>

README

This middleware is written on top of busboy for koa2.x to parse request bodies and async/await. It will parse content-types with multipart/form-data, application/x-www-form-urlencoded and application/json.

Install

npm install koa-async-body

Example

'use strict';

const Koa = require('koa');
const KoaBody = require('koa-async-body');

const koaBody = new KoaBody({
    limits: {
        fileSize: 1024*1024*2,
        files: 1,
        parts: 1000,
    }, //You can find the options in https://github.com/mscdex/busboy
    uploadDir: '/var/tmp', //customize the upload directory, default use require('os').tmpDir()
    keyPath: 'foobar' //customize appending to `koa context`, default use `ctx.requestBody`
});

const app = new Koa();

app.use(koaBody);

app.use((ctx)=> {
    if (ctx.requestBody) { //null if no request body
        ctx.body = ctx.requestBody;
    } else {
        ctx.body = 'hello world';
    }
});

app.listen(3000);
//curl -v -X POST 'http://localhost:3000' --data-urlencode 'hello=world'

Error handling

app.on('error',(error,ctx)=>{
    // Error('filesSizeLimit')
    // Error('partsLimit')
    // Error('filesLimit')
    // Error('fieldsLimit')
    if(error.message === 'filesSizeLimit')  {
        ctx.status = 400;
        ctx.body = 'filesize too big!!!'
    }
});