“Request”类型中不存在属性“body”

问题描述 投票:0回答:5

Request类型的req变量对于属性body没有intellisense。这是因为打字吗?

import { Request, Response } from 'express' import { ok, bad } from './responses' export const signIn: async (req: Request, res: Response) => { try { const { name, pword } = req.body // body is not recognized const data = auth.signIn(name, password) ok(res, data) } catch (error) { bad(res, error) } }
    
node.js express typescript asp.net-web-api typescript-typings
5个回答
1
投票

body-parser 已从 express 4 中删除到单独的项目中, 所以不会有任何关于它的类型定义。

我是这样使用的:

import * as bodyParser from 'body-parser'; let router: Router = express.Router(); router.use(bodyParser.text()); (req: Request, res: Response) => { let address = req['body']; }
    

1
投票
我只是:

npm install @typings/express --save-dev
它给了我智能感知并允许识别“req.body”。


0
投票
[解决方案] 请求和响应类型

您只需导入如下所示的类型即可工作

import { Request, Response } from 'express'; ... app.post('/signup', async (req: Request, res: Response) => { const { fullName, email } = req.body; ... }) );

我做的时候没用

Express.Request


[附加]解析请求体

从express v4.18开始,你不需要像

body-parser

那样单独的包

你可以像下面这样做

import express from 'express'; const app = express(); // Parse request body app.use(express.urlencoded({ extended: true })); app.use(express.json()); // Test Route app.get('/', (req, res) => res.json({ message: 'Hello World' }));
请注意,我在 

express.urlencoded

express.json
 上面放置了两件事,因为我发现表单数据发布请求仅适用于 
express.json
。因此,保留它们都会解析请求中的所有类型的 json 有效负载到 
req.body

    


0
投票
对于 Node v.20.x,这仍然有效

app.use(express.urlencoded({ extended: true })); app.use(express.json());
但是非常重要的顺序,中间件应该在路由之前,而不是之后。


-2
投票
我设法通过更改开发依赖项中的

package.json

 文件来解决这个问题,添加:

"@types/express": "^4.17.17",
    
© www.soinside.com 2019 - 2024. All rights reserved.