TSLint 将 body-parser 标记为已弃用

Hal*_*alt 18 typescript tslint body-parser

我有下面的打字稿代码:

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

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

app.use(bodyParser.json());

Run Code Online (Sandbox Code Playgroud)

在 VSCode 中,最后一行的 bodyParser 用黄色波浪线标记,表示不推荐使用 body-parser。

在 .d.ts 文件中,我看到以下内容:

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

declare namespace bodyParser {
...
    function json(options?: OptionsJson): NextHandleFunction;
Run Code Online (Sandbox Code Playgroud)

为什么 linter 会抱怨 body-parser 函数,而我没有在我的代码中将它用作函数?我是否在 tsconfig.json 文件中遗漏了一些东西来防止这种情况发生?编译似乎没有问题。

Tha*_*hah 54

BodyParse 内置于 Express js

所以现在你不必安装 body-parser,而是这样做。

app.use(express.json());
Run Code Online (Sandbox Code Playgroud)

  • 不客气:),您可以接受答案,以便人们知道它是一个可行的解决方案 (2认同)

Abr*_*ham 8

不要再使用 body-parser

自 Express 4.16+ 起,正文解析功能已内置于 Express 中

所以,你可以简单地做

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

直接使用express,无需安装body-parser。

使用卸载 body-parsernpm uninstall body-parser



然后您可以使用以下方法访问 POST 数据req.body

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

    var postData = req.body;

    //Or if body comes as string,

    var postData = JSON.parse(req.body);
});
Run Code Online (Sandbox Code Playgroud)