AngularJS http post不能与节点服务器一起使用

时间:2017-08-03 17:04:28

标签: javascript angularjs node.js

我的节点后端服务器中有这个代码:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

这就是api,即我想打电话:

router.post('/update/:_id', function(req, res, next) {
    console.log("req.body:" + req.body);
}

这是我通过角度1发布的帖子请求:

var data = {something: "something"}
var url = 'http://localhost:8081/update/5982168b399ccf32ad75ce2e';

$http({
    withCredentials: false,
    method: 'POST',
    url: url,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    data: data
})
.then(function (response) {
    if (response.data) {
        console.log("Post Data Submitted Successfully!");
    }
}, function (response) {
    console.log("Error status: " + response.status)
});

我正在使用Angular 1.6.1版本。

我已经尝试了所有内容,并查看了无数的帖子,但没有人帮助我。我可以看到身体经历。但是我在节点端后端得到了未定义的req.body

任何帮助都将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:3)

可能是

headers: {'Content-Type': 'application/x-www-form-urlencoded'}

您的数据是JSON格式,而不是x-www-form-urlencoded

{something: "something"}

你可以试试这个

headers: {'Content-Type': 'application/json'}

默认情况下,您在$ http POST中发送JSON数据,因此您可能不需要标头 把它拿出去尝试

=============================================== ================

另外,您的数据可能不是有效格式 JS不知道什么是东西,它不是变量吧? 你必须把它变成一个字符串,即使它是{ "key": "value" }对的密钥 你可以尝试这个,如果上面没有工作

{
    "something": "something"
}

验证您的JSON https://jsonlint.com/

答案 1 :(得分:0)

您需要对数据进行字符串化,并按原样更改内容类型:

var data = {something: "something"}
var url = 'http://localhost:8081/update/5982168b399ccf32ad75ce2e';

$http({
    withCredentials: false,
    method: 'POST',
    url: url,
    headers: {'Content-Type': 'application/json'},
    data: JSON.stringify(data)
})

此外,您还应该确保可以使用Postman对该URL进行POST,并且收到正文以解决服务器中的问题。另外,请考虑使用Angular Resource。