mongoose node.js中的Post请求没有将正确的数据放入mongodb [重复]

3mpgtkmj  于 2023-10-19  发布在  Go
关注(0)|答案(1)|浏览(80)

此问题已在此处有答案

Send POST data via raw JSON with Postman(6个回答)
5小时前关闭
我有这段代码,它是一段更大的代码的一部分,可以处理假数据,但现在我已经用mongodb和mongoose将它连接到在线数据库:

const express = require("express");
const app = express();
const port = 3000;

const mongoose = require("mongoose");
mongoose.connect(
  "mongodb+srv://evivermeeren:[email protected]/?retryWrites=true&w=majority"
);

const Schema = mongoose.Schema;

const messageSchema = new Schema({
  user: String,
  message: String,
});

const Message = mongoose.model("Message", messageSchema);

// Body-parser middleware om JSON-berichten te verwerken
app.use(express.json());

// CORS toestaan
const cors = require("cors");
app.use(cors());

app.post("/api/v1/messages", async (req, res) => {
  const { user, text } = req.body;

  // Create a new message document
  const newMessage = new Message({
    user,
    message: text,
  });

  try {
    // Save the new message to the database
    const savedMessage = await newMessage.save();

    res.json({
      status: "success",
      message: `POSTING a new message for user ${user}`,
      data: {
        message: savedMessage,
      },
    });
  } catch (error) {
    console.error(error);
    res.status(500).json({
      status: "error",
      message: "Internal Server Error",
    });
  }
});

我通过Postman测试了这个请求:

我的数据库里没有正确的记录。这就是答案:

{
    "status": "success",
    "message": "POSTING a new message for user undefined",
    "data": {
        "message": {
            "_id": "65301dba6aa88558fdfbade7",
            "__v": 0
        }
    }
}

但它应该是这样的:

{
    "status": "success",
    "message": "POSTING a new message for user Arne",
    "data": {
        "message": {
            "_id": "65301dba6aa88558fdfbade7",
            "__v": 0, 
"user": "Arne", 
"text": "This is a text"

        }
    }
}

数据库看起来是这样的:

bfnvny8b

bfnvny8b1#

您正在Body选项中以raw的形式发送 Postman 请求。如果你想以JSON格式发送,那么你需要确保在Headers选项卡中设置了Content-Type: application/json。然后,您的app.use(express.json());中间件将能够解析它。
当你发送邮件到路由/api/v1/messages,然后在这里解构的那一刻:

const { user, text } = req.body;

usertext的值将是未定义的,因此它们没有存储在mongodb文档中。
或者,您可以使用x-www-form-urlencoded选项发送它。在重新发送post请求之前,请使用额外的中间件更新app.js文件,如下所示:

// Body-parser middleware om JSON-berichten te verwerken
app.use(express.json());
app.use(express.urlencoded({ extended: true})); //< Add this

如果没有app.use(express.urlencoded({ extended: true}));,你对路由/api/v1/messages的post请求将再次导致一个空对象驻留在req.body对象中,所以必须使用它。

相关问题