首页 > 解决方案 > 请求正文在 Post 中为空

问题描述

以下是参考我之前的问题编写的测试文件:model.save() 返回无效输出

// Imports
var express=require("express")
, mongoose=require("mongoose")
, bodyParser= require('body-parser')
, bodyParser = require("body-parser");
const { Int32 } = require("bson");


// Constants
const app = express()
const PORT=4002

// Create a model
const dataModel=mongoose.model('dataCollection',mongoose.Schema(data))




// Our Schema
var data={
    value: Number
}

// Making connection with database
mongoose.Promise= global.Promise;
mongoose.connect('mongodb://localhost/testdb', {
    useNewUrlParser:true,
    useUnifiedTopology:true
})


// Create the controller to save data
function postData(req,res){
    console.log(req.body)
    let newData = new dataModel(req.body)
    newData.save((err,resp)=>{
        if(err) console.log(err)
        else res.json(resp)
    })
}

// express set root page
app.get('/',(req,res)=> res.send("ROOT PAGE"));

// Set Route for our post request
app.route('/app')
.get((req,res)=>res.send("Nothing here"))
.post(postData);

// body-parser setup
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());

// start listening on server
app.listen(PORT,()=>console.log(`Your application is running on Port: ${PORT}`));



上面的代码为此处显示的 POST 请求 打印 undefined for console.log(req.body)in controller function :postData在此处输入图像描述

标签: javascriptnode.jsexpresspost

解决方案


您可以想象请求来自顶部并到达底部。

在您访问路线后解析正文是没有意义的。您需要先解析正文,然后访问路线。

// body-parser setup
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());

// express set root page
app.get('/',(req,res)=> res.send("ROOT PAGE"));

// Set Route for our post request
app.route('/app')
.get((req,res)=>res.send("Nothing here"))
.post(postData);

但是 bodyparsers 不再使用。您可以改用app.use(express.json())


推荐阅读