node.js - Egenskapen 'body' finns inte på typen 'Request'


Variabeln req av typen Request har ingen intellisense för egenskapen body. Beror detta på typerna?

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)
    }
}

Svar #1

body-parser hade tagits bort från express 4 till ett separat projekt, så det kommer inte finnas någon typdefinition om det.

Jag använder det på det här sättet:

import * as bodyParser from 'body-parser';

let router: Router = express.Router();
router.use(bodyParser.text());

(req: Request, res: Response) => {
    let address = req['body'];
}

Svar #2

[Lösning] Typ för förfrågan & svar

Du behöver bara importera typer som nedan så kommer det att fungera

import { Request, Response } from 'express';

...

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

Det fungerade inte när jag gjorde Express.Request

[Ytterligare] Parsning av begärans kropp

Från och med express v4.18 behöver du inte ett separat paket som body-parser

Du kan göra som nedan

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' }));


Observera att jag har placerat två saker ovanför express.urlencoded & express.json eftersom jag märkte att formdata-postförfrågan inte fungerade med bara express.json. Så genom att behålla båda parsar det alla typer av json-payload i förfrågan till req.body

Relaterade artiklar