Introduction to Koa-body
Koa-body is an essential middleware for Koa.js framework that helps in dealing with the request body. It supports parsing JSON, URL-encoded, and multipart request bodies. Let’s dive into some of the useful APIs provided by Koa-body and understand how to integrate them.
Basic Setup
First, install koa-body:
npm install koa-body
Then, use it in your Koa application:
const Koa = require('koa'); const koaBody = require('koa-body'); const app = new Koa(); app.use(koaBody()); app.listen(3000, () => { console.log('Server running on port 3000'); });
Uploading Files
With koa-body, you can handle file uploads easily:
const Koa = require('koa'); const koaBody = require('koa-body'); const fs = require('fs'); const path = require('path'); const app = new Koa(); app.use(koaBody({ multipart: true, formidable: { uploadDir: path.join(__dirname, 'uploads'), keepExtensions: true } })); app.use(async ctx => { const files = ctx.request.files.file; // File is the name you're uploading as ctx.body = `File uploaded: ${files.name}`; }); app.listen(3000, () => { console.log('Server running on port 3000'); });
Handling JSON and URL-encoded Data
You can parse incoming JSON or URL-encoded data easily:
const Koa = require('koa'); const koaBody = require('koa-body'); const app = new Koa(); app.use(koaBody()); app.use(async ctx => { if (ctx.method === 'POST') { ctx.body = { message: 'Data received!', data: ctx.request.body }; } else { ctx.body = 'Send a POST request with JSON or URL-encoded data'; } }); app.listen(3000, () => { console.log('Server running on port 3000'); });
Restricting File Upload Size
To limit the size of the files being uploaded:
const Koa = require('koa'); const koaBody = require('koa-body'); const app = new Koa(); app.use(koaBody({ multipart: true, formidable: { maxFileSize: 200 * 1024 * 1024 // 200 MB } })); app.use(async ctx => { const files = ctx.request.files.file; ctx.body = `File uploaded: ${files.name}`; }); app.listen(3000, () => { console.log('Server running on port 3000'); });
Complete App Example
Here’s a complete app example combining the discussed functionalities:
const Koa = require('koa'); const koaBody = require('koa-body'); const fs = require('fs'); const path = require('path'); const app = new Koa(); app.use(koaBody({ multipart: true, formidable: { uploadDir: path.join(__dirname, 'uploads'), keepExtensions: true, maxFileSize: 200 * 1024 * 1024 } })); app.use(async ctx => { if (ctx.method === 'POST') { const files = ctx.request.files.file; const data = ctx.request.body; ctx.body = { message: 'Data received!', data: data, fileInfo: files ? `File uploaded: ${files.name}` : 'No file uploaded' }; } else { ctx.body = 'Send a POST request with JSON, URL-encoded data, or files'; } }); app.listen(3000, () => { console.log('Server running on port 3000'); });
Koa-body is a powerful middleware to handle various kinds of request bodies in a Koa.js application. Mastering its use can significantly enhance your API management capabilities.