JSON在POST方法中不可读

时间:2015-09-15 01:54:21

标签: json angularjs node.js

我正在尝试将数据从前端应用程序(Angular)发送到节点服务器。我创建了一个表单,允许应用程序通过POST方法发送数据,所以我这样做了:

ggplot(data = dat, aes(x = as.Date(Date), y = thick, group = tpcolor, color = tpcolor)) +
       geom_point(shape = 18, size = 3, position = position_jitter(w = 50, h = 0)) +
       geom_smooth(data = ldat, aes(x = Date, y = Mean), method = 'lm', se = FALSE, fullrange = TRUE, colour = "black", linetype = "dotdash", size = 0.25, inherit.aes = FALSE)

我的节点服务器如下所示:

$http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';       
var res = $http.post('http://myserver/saveMessage', JSON.stringify($scope.formData));
res.success(function(data) {
    console.log('data sent')    
});
res.error(function(data) {
   console.log('Error: ' + data);
});

一切似乎都运行良好,但是当我发送数据时,它在浏览器控制台中看起来像这样:

router.post('/saveMessage', function(req, res) {    
    console.log(req.body);  
});

看起来这个节点曾经收到过:

Object {"Nom" : "toto", "Message":"test"}

我正在使用nginx为服务器应用程序提供服务(因为它正在运行,例如,端口3000)并且我正在使用'grunt serve'来为客户端应用程序提供服务(因此它在另一个端口上运行,例如, 3001)。

你知道我为什么收到这样的JSON以及如何修复它?

2 个答案:

答案 0 :(得分:0)

您已将内容类型设置为'application/x-www-form-urlencoded; charset=UTF-8',并且您正在对JSON进行字符串化,但您希望在服务器上接收JSON对象。

如果要将JSON发送到服务器,a)您不需要设置内容类型标头($http会智能地猜测这个,只要您没有设置默认标头), b)只需将它作为一个普通的JavaScript对象放在$http.post的主体中,服务就会为你处理它。

如果由于某些原因您需要一个不同的默认标头,那么您可以通过将JSON设置为application/json来发送JSON请求的一次性标头。

答案 1 :(得分:0)

我找到了一个解决方案,但它似乎很脏。

最后我使用$ http和get方法,并通过stringifing我的对象发送我的数据。我在节点端解析它。

如果我使用此方法的凭据,您认为我的系统是否受到足够的保护?