我拼命想通过POST将数据发送到express.js应用程序。 express.js应用程序工作正常,但无论出于何种原因,POST数据都没有正确发送到服务器:
var xhrConfig = {
url: "http://localhost:3000/test",
body: {"foo": "bar"},
// body: JSON.stringify({"foo": "bar"}),
// body: 'foo=bar',
method: "POST"
};
document.createElement('core-xhr').request(xhrConfig);
我的express.js console.log(req.body)
输出始终为{}
。无论是否发送字符串或原始或JSON。我还尝试了params
而不是body
来确保。
我在jQuery中尝试了相同的操作,以排除在express.js路由中出现错误的可能性,但$.ajax({url: 'http://localhost:3000/test', data: {foo: 'bar'}, type: 'POST'});
完全正常。
那么req,body
总是空的原因是什么?有什么想法吗?
//编辑:
body: "foo=bar",
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
这个有效,但有没有办法可以使用body: {"foo": "bar"}
而不是先将其转换为foo=bar
?
答案 0 :(得分:1)
据我所知,core-xhr
是一个低级元素,而它的conf上的body对象不接受JS对象,而是接受你想要使用的字符串体。
对于您描述的用途,您可以尝试使用可以使用对象配置的更高级别元素core-ajax
。 core-ajax
上的文档:https://www.polymer-project.org/docs/elements/core-elements.html#core-ajax。
<core-ajax
auto
url="http://localhost:3000/test"
body='{"foo": "bar"}'
handleAs="json"
method: "POST"
on-core-response="{{handleResponse}}"></core-ajax>
希望它有所帮助。如果您需要更详细的示例,请不要犹豫。
答案 1 :(得分:1)
看起来像是通过Express查看Content-Type标题以确定它具有哪种类型的主体,以下是适合我的。
this.$.xhr.request({
url: "/my/url",
method: "POST",
headers:{
"Content-Type":"application/json"
},
body: JSON.stringify(survey),
callback: function(response){
console.log(response);
}
});
答案 2 :(得分:0)
我在Polymer上遇到了这个问题。这个问题非常令人沮丧,因为在core-xhr上没有关于Polymer的大量文档。
由于你已经自己回答了第一个问题,我将回答后者:是/否。如果您查看<core-xhr>
的来源,它会直接将参数提供给xhr.send(params)
。但是,有一个调用toQueryString的方法,它可以做你想做的事。
toQueryString: function(params) {
var r = [];
for (var n in params) {
var v = params[n];
n = encodeURIComponent(n);
r.push(v == null ? n : (n + '=' + encodeURIComponent(v)));
}
return r.join('&');
}