TSLint将body-parser标记为已弃用

24

我有以下的 Typescript 代码:

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

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

app.use(bodyParser.json());

在 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;

为什么代码检查器会抱怨 body-parser 函数,而我在代码中并没有将它作为函数使用?我是否遗漏了 tsconfig.json 文件中的某些设置以防止出现这种情况?编译似乎没有问题。


这是Express吗? - Thanveer Shah
是的,抱歉。我添加了更多的代码行来使其更清晰。 - Halt
据我所知,Express.js自V4.16或类似版本开始内置了body-parser函数。 - Kasey Chang
2个回答

64

BodyParse已经集成到Express js中。

所以现在你不需要安装body-parser,可以采用以下方式。

app.use(express.json());

谢谢你提供的信息,我之前看到过这个,但没有给予足够的关注,因为我没有意识到它也意味着我不应该使用原始的body-parser。尽管如此,我仍然不理解lint警告,因为弃用注释只在我没有使用的函数之前。 - Halt
2
不客气 :) ,您可以接受答案,这样大家就知道它是一个可行的解决方案。 - Thanveer Shah
1
如果你正在寻找一些吃爆米花的材料,请访问以下链接:https://github.com/expressjs/body-parser/issues/428 - AndrogenAgonist

8

不再使用body-parser

自从Express 4.16+版本起,Express已经内置了body解析功能。

因此,你只需简单地执行以下操作:

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

可以直接使用 Express,无需安装 body-parser。

使用 npm uninstall body-parser 卸载 body-parser。



然后您可以使用 req.body 访问 POST 数据。

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

    var postData = req.body;

    //Or if body comes as string,

    var postData = JSON.parse(req.body);
});

什么是应用程序和表达式值? - sam
@sam 这是从库中引入的代码。const express = require("express");const app = express(); - Abraham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接