此问题已在此处有答案:
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"
}
}
}
数据库看起来是这样的:
1条答案
按热度按时间bfnvny8b1#
您正在
Body
选项中以raw
的形式发送 Postman 请求。如果你想以JSON格式发送,那么你需要确保在Headers选项卡中设置了Content-Type: application/json
。然后,您的app.use(express.json());
中间件将能够解析它。当你发送邮件到路由
/api/v1/messages
,然后在这里解构的那一刻:user
和text
的值将是未定义的,因此它们没有存储在mongodb文档中。或者,您可以使用
x-www-form-urlencoded
选项发送它。在重新发送post请求之前,请使用额外的中间件更新app.js文件,如下所示:如果没有
app.use(express.urlencoded({ extended: true}));
,你对路由/api/v1/messages
的post请求将再次导致一个空对象驻留在req.body
对象中,所以必须使用它。