Koa body parser pro JSON

Koa.js bohužel sama o sobě neobsahuje parser body, což jsem zjistil až dle díky kolegy, který mě upozornil, že mi to v Postmanu funguje pouze díky mé chybě. Tedy musí vybrat body parser pro Koa.

koa-bodyparser

GitHub 1100 hvězd. Poslední změna 4 měsíce. Parsuje JSON, form a text.

const Koa = require('koa');
const bodyParser = require('koa-bodyparser');

const app = new Koa();
app.use(bodyParser());

app.use(async ctx => {
  // the parsed body will store in ctx.request.body
  // if nothing was parsed, body will be an empty object {}
  ctx.body = ctx.request.body;
});

koa-body

GitHub 731 hvězd. Poslední změna tento měsíc. Umí toho parsovat opravdu hodně:

  • multipart/form-data
  • application/x-www-urlencoded
  • application/json
  • application/json-patch+json
  • application/vnd.api+json
  • application/csp-report
  • text/xml
// použití s koa-router
const Koa = require('koa');
const app = new Koa();
const router = require('koa-router')();
const koaBody = require('koa-body');

router.post('/users', koaBody(),
  (ctx) => {
    console.log(ctx.request.body);
    // => POST body
    ctx.body = JSON.stringify(ctx.request.body);
  }
);

app.use(router.routes());

app.listen(3000);
console.log('curl -i http://localhost:3000/users -d "name=test"');

koa-better-body

GitHub 443 hvězd. Poslední změna tento měsíc. Parsuje text, buffer, json, json patch, json api, csp-report, multipart, form and urlencoded body.

// použití koa-router

'use strict';

var app = require('koa')();
var body = require('koa-better-body');
var router = require('koa-router')();

router.post('/upload', body(), function* (next) {
  console.log(this.request.files);
  console.log(this.request.fields);

  // there's no `.body` when `multipart`,
  // `urlencoded` or `json` request
  console.log(this.request.body);

  // print it to the API requester
  this.body = JSON.stringify(
    {
      fields: this.request.fields,
      files: this.request.files,
      body: this.request.body || null,
    },
    null,
    2,
  );

  yield next;
});

app.use(router.routes());
app.listen(4292);

var format = require('util').format;
var host = 'http://localhost:4292';
var cmd = 'curl -i %s/upload -F "source=@%s/.editorconfig"';

console.log('Try it out with below CURL for `koa-better-body` repository.');
console.log(format(cmd, host, __dirname));

koa-json-body

GitHub 14 hvězd. Poslední změna více jak tři roky. Umí jen JSON parsovat body dotazu, což je přesně co potřebuji a stačí mi.

// použití s koa-router
const body = require('koa-json-body')({ limit: '10kb' })

app.post('/users', body, (ctx, next) => {
  console.log(ctx.request.body)
})

Závěr

Graf stahování koa parserů za poslední dva roky.
Graf stahování koa parserů za poslední dva roky. Zdroj: https://www.npmtrends.com/

Nakonec jsem se rozhodl zkusit používat koa-bodyparser. JSON funguje dobře a vše se jeví OK. Snad všechny výše uvedené parsery jsou založeny na šestnáct měsíců starém co-body, které by asi stačilo, jen vývoj byl zastaven.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

*