我正在尝试将数据从前端应用程序(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以及如何修复它?
答案 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我的对象发送我的数据。我在节点端解析它。
如果我使用此方法的凭据,您认为我的系统是否受到足够的保护?