突然之间,我所有的项目都出现了这种情况。

每当我在nodejs中使用express和body-parser req发布帖子时。Body是一个空对象。

var express    = require('express')
var bodyParser = require('body-parser')

var app = express()

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded())

// parse application/json
app.use(bodyParser.json())

app.listen(2000);

app.post("/", function (req, res) {
  console.log(req.body) // populated!
  res.send(200, req.body);
});

通过ajax和邮递员,它总是空的。

但是通过curl

$ curl -H "Content-Type: application/json" -d '{"username":"xyz","password":"xyz"}' http://localhost:2000/

它按预期工作。

我尝试在前者中手动设置Content-type: application/json,但我总是得到400个坏请求

这快把我逼疯了。

我以为是身体解析器更新了一些东西,但我降级了,它没有帮助。

感谢任何帮助,谢谢。


当前回答

谢谢大家的精彩回答! 花了相当多的时间寻找解决方案,在我这边,我犯了一个基本的错误:我从函数内部调用bodyParser.json():

app.use([' /密码'],异步(点播,res,下一个)= > { bodyParser.json () /…… next () })

我只需要做app.use(['/password'], bodyParser.json()),它工作…

其他回答

谢谢大家的精彩回答! 花了相当多的时间寻找解决方案,在我这边,我犯了一个基本的错误:我从函数内部调用bodyParser.json():

app.use([' /密码'],异步(点播,res,下一个)= > { bodyParser.json () /…… next () })

我只需要做app.use(['/password'], bodyParser.json()),它工作…

我的问题是先创建路线 要求(“。/线路/路线”)(应用); 我之前把它移到了代码末尾 app.listen 它成功了!

当表单不包含任何文件上传输入时,请确保您已经删除了表单标记处的enctype属性

enctype='multipart/form-data

你不应该做JSON.stringify(数据)而通过AJAX发送如下。

这不是正确的代码:

function callAjax(url, data) {
    $.ajax({
        url: url,
        type: "POST",
        data: JSON.stringify(data),
        success: function(d) {
            alert("successs "+ JSON.stringify(d));
        }
    });
}   

正确的代码是:

function callAjax(url, data) {
    $.ajax({
        url: url,
        type: "POST",
        data: data,
        success: function(d) {
            alert("successs "+ JSON.stringify(d));
        }
    });
}

在我的情况下,我使用Fetch API发送POST请求,在正文中,我发送了一个对象而不是字符串。

错误-> {body: {email: 'value'}}

我纠正了stringized body -> {body: JSON。Stringify ({email: 'value'})}