Node.js req.body返回对象,但在nodejs中该对象未定义
该代码结合了expressjsnodejs和Mongodb 当我控制台log req.body时,结果是 [对象]Node.js req.body返回对象,但在nodejs中该对象未定义,node.js,mongodb,express,Node.js,Mongodb,Express,该代码结合了expressjsnodejs和Mongodb 当我控制台log req.body时,结果是 [对象] 但当我控制台log req.body.name时,它被证明是未定义的 { “名称”:“vaibhav”, “技术”:“NodeJS”, } 我的节目是这样的 app.js 路由器/alien.js const express = require("express"); const router = express.Router(); const Alien =
但当我控制台log req.body.name时,它被证明是未定义的 { “名称”:“vaibhav”, “技术”:“NodeJS”, } 我的节目是这样的 app.js 路由器/alien.js
const express = require("express");
const router = express.Router();
const Alien = require("../models/alien")
router.get("/", async(req, res)=>{
try{
const aliens = await Alien.find()
res.json(aliens)
}
catch(err){
res.send("Error" + err)
}
})
router.get("/:id", async(req, res)=>{
try{
const aliens = await Alien.findById(req.params.id)
res.json(aliens)
}
catch(err){
res.send("Error" + err)
}
})
//POST METHOD
router.post("/", async(req, res)=>{
console.log("body "+req.body);
const alien = new Alien({
name: req.body.name,
tech: req.body.tech,
sub: req.body.sub
})
try{
const al = await alien.save();
res.json(al);
}catch(err){
res.send("Error: "+err)
}
})
module.exports = router;
model/alien.js
const mongoose = require("mongoose");
const alienSchema = new mongoose.Schema({
name:{
type:String,
require:true,
},
tech:{
type:String,
reqired:true
},
sub:{
type:Boolean,
required:true,
default:false
}
})
module.exports = mongoose.model('Alien', alienSchema);
有人能帮我吗???你的邮递员请求发送的是
text/plain
而不是application/json
。这就是为什么express.json()
中间件没有解析请求并将数据放入req.body
您需要修复邮递员请求,使其将数据格式化为JSON并发送正确的内容类型。您的邮递员请求发送的是
text/plain
,而不是application/JSON
。这就是为什么express.json()
中间件没有解析请求并将数据放入req.body
您需要修复POSTMAN请求,以便它将数据格式化为JSON并发送正确的内容类型。在POSTMAN中,选择Body->raw(JSON应用程序/JSON from下拉列表)并以JSON格式发送数据
{
"name": "Your Name",
"tech": "Your Tech",
"sub": "Your Subject"
}
在Postman中,选择Body->raw(从下拉列表中选择JSON应用程序/JSON),并以JSON格式发送数据
{
"name": "Your Name",
"tech": "Your Tech",
"sub": "Your Subject"
}
删除app.use(bodyparser.json())代码>。每个类型只需要一个中间件,而不是两个,并且没有理由再使用body解析器,因为它现在都内置到Express中了。您是否100%确定传入的数据是
application/json
?您可以显示创建请求的客户端代码吗?我正在通过POSTMAN通过POST方法发送数据,这是唯一一种形式的传入数据currentlym,{“name”:“vaibhav”,“tech”:“NodeJS”,},它仍然不能准确地告诉我们传入请求的内容类型。您可以添加console.log(req.headers)
并查看内容类型设置为什么。然后,也执行console.log(req.body)
并查看其中是否有任何内容。当我执行console.log(req.body)时,它返回[object object],并对console.log(req.headers)返回相同的结果,console.log(req.body)
不执行[object object]
除非您以某种方式更换了日志记录系统,否则您必须以不同的方式进行日志记录。请使用我建议的确切代码来记录它。如果您正在尝试标记日志,请使用“console.log(“body”,req.body)
”的方式,而不是使用console.log(“body”+req.body)
。删除app.use(bodyparser.json());
。每种类型您只需要一个中间件,而不是两个,并且没有理由再使用body parser,因为它现在都内置在Express中。您是否100%确定传入的数据是application/json
?您能否显示创建请求的客户端代码?我通过POSTMAN通过POST方法发送数据,这是唯一的一种形式传入数据currentlym,{“name”:“vaibhav”,“tech”:“NodeJS”,}仍然不能准确地告诉我们传入请求的内容类型。您可以添加console.log(req.headers)
并查看内容类型
设置为什么。然后,还可以执行console.log(req.body)
并查看其中是否有任何内容。当我输入console.log(req.body)时,它返回[object object],console.log(req.headers)也返回[object object],uhh,console.log(req.body)
不执行[object object]
除非您以某种方式更换了日志系统,否则您必须以不同的方式进行日志记录。请使用我建议的确切代码进行日志记录。如果您试图标记日志,请使用“console.log(“body”,req.body)
,而不是使用console.log(“body”+req.body)
。