微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创建MERN应用时,我需要创建一个从前端到后端的POST请求,但是请求体为空

如何解决创建MERN应用时,我需要创建一个从前端到后端的POST请求,但是请求体为空

我正在创建一个 MERN 应用程序,我试图在其中向后端发送一个发布请求,但是当我从后端记录 req.body 时,它是空的

const removetour = (id) => {
    const getDevices = async () => {
        const settings = {
            method: 'POST',headers: {
                'Content-Type': 'application/json'
            },body: JSON.stringify({ name: 'here',info: '1',image: '1',price: '1' })
        };
        try {
            const fetchResponse = await fetch(`http://localhost:3080/add-tour`,settings);
            const data = await fetchResponse.json();
            return data;
        } catch (e) {
            return e;
        }
    };
    getDevices();
    const newTours = tours.filter((tour) => tour._id !== id);
    setTours(newTours);
};

按下按钮时调用函数。 在后端,我有一个 app.post,它应该接收请求。收到的 request.body 为空

const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const cors = require('cors');
require('dotenv').config();
const data = require('./data.json');

//dotenvs
const DBLink = process.env.DB_HOST;
const port = process.env.PORT;
const home = process.env.HOME;

//app
const app = express();
app.use(cors());
app.use(bodyParser.urlencoded({ extended: true }));

//shema
const TourSchema = mongoose.Schema({
    name: {
        type: String,required: true
    },info: {
        type: String
        // required: true
    },image: {
        type: String
        // required: true
    },price: {
        type: String
        // required: true
    }
});
const Tour = mongoose.model('tour',TourSchema);


//app routes
app.get('/',(req,res) => {
    (async () => {
        const tours = await Tour.find((data) => data);
        try {
            res.json(tours);
        } catch (error) {
            console.log(error);
        }
    })();
});
app.post('/add-tour',res) => {
    console.log(req.body);
    // const { name,image,info,price } = req.body;
    // const tour = new Tour({ name,price });
    // tour.save();
    // res.status(201).redirect('http://localhost:3000/');
    res.send('here');
});

//mongoose
mongoose
    .connect(DBLink,{
        useCreateIndex: true,useFindAndModify: false,useUnifiedTopology: true,useNewUrlParser: true
    })
    .then(() => {
        app.listen(port,() => console.log(`Server is running on ${port}`));
    })
    .catch((err) => console.log(err));

我在终端中得到的只是 - 终端: {}

但是,当我从 html 表单发出 post 请求时,输入具有值和名称,收到的请求具有正文

解决方法

您可能在应用 body-parser 时遇到了一些问题。检查以下官方示例 https://github.com/expressjs/body-parser“Express/Connect 顶级通用”。如果你添加 app.use(bodyParser.json()) 它应该正确解析 json。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。