24

I have the Typescript code below:

import * as express from 'express';
import * as bodyParser from 'body-parser';

...
const app: express.Application = express();

app.use(bodyParser.json());

In VSCode the bodyParser on the last line is marked with yellow squiggles saying that body-parser is deprecated.

In the .d.ts file I see the following:

/** @deprecated */
declare function bodyParser(
    options?: bodyParser.OptionsJson & bodyParser.OptionsText & bodyParser.OptionsUrlencoded,
): NextHandleFunction;

declare namespace bodyParser {
...
    function json(options?: OptionsJson): NextHandleFunction;

Why is the linter complaining about the body-parser function while I do not use it as a function in my code? Am I missing something in a tsconfig.json file to prevent this? Compiling doesn't seem to be a problem.

Halt
  • 2,924
  • 4
  • 22
  • 26

2 Answers2

64

BodyParse is built into Express js

So now you don't have to install body-parser, do this instead.

app.use(express.json());
Thanveer Shah
  • 3,250
  • 2
  • 15
  • 31
  • Thank you for that, I had seen this before but didn't pay enough attention because I didn't realise it also meant that I shouldn't use the original body-parser. Still I don't understand the lint warning because the deprecation annotation is only before the function that I'm not using. – Halt Jun 16 '20 at 05:05
  • 2
    You are welcome :) , You could accept the answer so people know its a working solution – Thanveer Shah Mar 10 '21 at 08:45
  • 1
    if you are looking for some popcorn eating material: https://github.com/expressjs/body-parser/issues/428 – AndrogenAgonist Apr 08 '21 at 19:33
7

Do not use body-parser anymore

Since Express 4.16+ the body parsing functionality has become builtin with express

So, you can simply do

app.use(express.urlencoded({extended: true}));
app.use(express.json()) // To parse the incoming requests with JSON payloads

using express directly, without having to install body-parser.

uninstall body-parser using npm uninstall body-parser



Then you can access the POST data, using req.body

app.post("/yourpath", (req, res)=>{

    var postData = req.body;

    //Or if body comes as string,

    var postData = JSON.parse(req.body);
});
Abraham
  • 12,140
  • 4
  • 56
  • 92