DEV Community

Костя Третяк
Костя Третяк

Posted on

The "@ts-stack/body-parser" package passes the parsing results via a Promise

The package @ts-stack/body-parser is a fork of body-parser - the native ExpressJS package. It is written in TypeScript in ESM format, without support for older versions of Node.js < v20.6.0. To install it, run the following command:

npm install @ts-stack/body-parser
Enter fullscreen mode Exit fullscreen mode

This package parses the body of an HTTP request that has the following types: JSON, Raw, Text, URL-encoded. You can use it as follows:

import http from 'http';
import { getJsonParser } from '@ts-stack/body-parser';

const jsonParser = getJsonParser({ limit: '1kb' });

http.createServer(async function (req, res) {
  try {
    const body = await jsonParser(req, req.headers);
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain')
    res.write('you posted:\n');
    res.end(JSON.stringify(body));
  } catch (err: any) {
    // handling an error
  }
});
Enter fullscreen mode Exit fullscreen mode

Alternatively, you can use the BodyParserGroup helper. It is designed for cases when you do not know which parser is needed for a specific route. When creating an instance of the BodyParserGroup class, you can pass options for the corresponding parsers, after which you can use the parse method as follows:

import { BodyParserGroup } from '@ts-stack/body-parser';

const bodyParserGroup = new BodyParserGroup({
  jsonOptions: config.jsonOptions,
  textOptions: config.textOptions,
  urlencodedOptions: config.urlencodedOptions,
  rawOptions: config.rawOptions,
});

const body = await bodyParserGroup.parse(req, req.headers, {});
Enter fullscreen mode Exit fullscreen mode

Top comments (0)