Node.js req.body返回对象,但在nodejs中该对象未定义

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 =

该代码结合了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 = 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)