【问题标题】:Request body is empty in Post请求正文在 Post 中为空
【发布时间】:2021-03-20 21:06:32
【问题描述】:

以下是参考我之前的问题写的测试文件:model.save() returns an invalid output .

// 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 请求,上述代码在控制器函数 postData 中为 console.log(req.body) 打印 undefined:

【问题讨论】:

  • 中间件按照它们在代码中定义的顺序(从上到下)运行。您需要将body-parser 设置移到请求处理代码上方。

标签: javascript node.js express post


【解决方案1】:

你可以想象请求是从顶部传到底部的。

在访问完路由后解析 body 是没有意义的。你需要先解析body,然后访问路由。

// 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())

【讨论】:

  • 有趣的是 console.log(req.body) 现在工作正常,但从 POST 收到的响应没有改变,保存功能仍在集合中存储 {"_id":{"$oid":"5fd0c2de8400673e042cf91d"},"__v":0}
猜你喜欢
  • 2019-06-26
  • 2018-11-28
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 2018-08-03
  • 2015-09-08
  • 2016-06-01
  • 1970-01-01
相关资源
最近更新 更多