为什么我的req.body在POST上总是为空?

约翰尼·马克

有很多相同的问题,都有答案,但是我发现大多数答案都围绕着我正在使用的body-parser的使用。我已经写了许多基本的API,但是从来没有遇到过这个问题。不管我做什么,由于req.body为空,属性不会被保存。

server.js

'use strict'

//basic server setup
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var Routes = require('./routes.js');
var config = require('./config');

// use body parser to parse requests
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(express.static('public'));

//connect to db
var mongoose = require('mongoose');
mongoose.Promise = global.Promise; //temp fix for mongoose promise deprecation warning
mongoose.connect(config.url);

//set port to env or 8080
var port = process.env.PORT || 8080;

//setup routes
var router = express.Router();

//use the imported routes
app.use('/', Routes);

//start the server and log
app.listen(port);
console.log('Server listening on %s', port);  

routes.js

'use strict'

var express = require('express');
var router = express.Router();
var Model = require('./model.js');

var count = 0;

router.use(function(req, res, next) {
    count++;
    console.log('API hit count = %s', count);
    next();
});

// /model post(create new model) get(see all models)
router.route('/model')
.post(function(req,res) {
    var model = new Model();
    model.newKey = req.body.newKey;
    model.newVal = req.body.newVal;

//save the model and checkfor errors
    model.save(function(err) {
        if (err) {
            res.send(err);
        } else {
            res.json({message: "Model created!"});
        }    
    });

})

.get(function(req, res) {
    console.log('made it to GET')
    Model.find(function(err, models) {
        if (err) res.send(err);

        res.json(models);
    })
});

module.exports = router;  

app.js

'use strict';

var post = function() {
    var newKey = $('#postKey').val();
    var newVal = $('#postVal').val();
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("POST", "http://localhost:8080/model", true);

    //Send the proper header information along with the request
    xmlhttp.setRequestHeader("Content-type", "application/json");
    xmlhttp.send({
        newKey: newKey,
        newVal: newVal
    });

    xmlhttp.onreadystatechange = function() {
       if (this.readyState == 4 && this.status == 200) {
            console.log('>>>> ', JSON.parse(this.responseText));
       }
    };
}

var get = function() {
    console.log('Get Button working')
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", "http://localhost:8080/model");
    xmlhttp.send();
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            console.log('>>>> ', JSON.parse(this.responseText));
       }
    };
}
阿塔尔·拉曼·蒙娜(Ataur rahman munna)

如果您设置了

xmlhttp.setRequestHeader("Content-type", "application/json"); 

那么你需要使用

JSON.stringify(...your object ...) 

如@JaromandaX所说。如果您设置了

xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

那么你需要serializeobjectobject.serialize();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我的HttpPostedFileBase总是为空?

来自分类Dev

req.body 是空的,我不知道为什么

来自分类Dev

带有数据的POST上req.body为空,但是记录req显示req.body存在

来自分类Dev

当我尝试从端口 3000 获取它们时,为什么我的 cookie 和 signedCookies 在 req 中为空?

来自分类Dev

WebApi - 为什么我的帖子变量总是为空?

来自分类Dev

为什么我的response.body为空

来自分类Dev

为什么req.query始终为空?

来自分类Dev

express POST req.body 解析器为空

来自分类Dev

函数参数总是为空为什么?

来自分类Dev

为什么 PropertyChanged 总是为空?

来自分类Dev

为什么post参数总是来自Reactjs的asp.net核心Web API为空?

来自分类Dev

req.body 总是返回为 undefined

来自分类Dev

为什么我的KendoGrid“更新”参数在控制器中总是为空?

来自分类Dev

为什么表单数据不在req.body中?

来自分类Dev

为什么我的jQuery空为无效?

来自分类Dev

为什么我的向量为空?

来自分类Dev

为什么我的JavaFX TableView为空

来自分类Dev

为什么我的InitializeComponent子为空?

来自分类Dev

为什么我的MultipartFile为空

来自分类Dev

为什么我的屏幕比例为空?

来自分类Dev

为什么我的对象保持为空?

来自分类Dev

为什么我的WPF CompboBox为空

来自分类Dev

为什么我的变量为空?

来自分类Dev

为什么我的请求正文为空?

来自分类Dev

为什么我的清单为空?

来自分类Dev

Asp .Net MVC,为什么我的viewbag 总是不为空?

来自分类Dev

为什么我的请求总是带有空值

来自分类Dev

为什么数组在响应中总是为空?

来自分类Dev

Elasticsearch,为什么添加元素总是为空