我有一系列要传递给服务器的ID。我在网上看到的其他答案描述了如何将这些ID作为查询参数传递到url中。我不想使用这种方法,因为可能有很多ID。这是我尝试过的:
AngularJS:
console.log('my ids = ' + JSON.stringify(ids)); // ["482944","335392","482593",...]
var data = $.param({
ids: ids
});
return $http({
url: 'controller/method',
method: "GET",
data: data,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})
.success(function (result, status, headers, config) {
return result;
})
Node.js的:
app.get('/controller/method', function(req, res) {
console.log('my ids = ' + JSON.stringify(req.body.ids)); // undefined
model.find({
'id_field': { $in: req.body.ids }
}, function(err, data){
console.log('ids from query = ' + JSON.stringify(data)); // undefined
return res.json(data);
});
});
为什么我在服务器端获得undefined
?我怀疑是因为我使用$.params
,但我不确定。
答案 0 :(得分:4)
In Rest GET
方法使用URL作为传输信息的方法,如果要在AJAX调用中使用属性data
,则需要将更改方法的更多信息发送到{{ 1}}方法。
因此,在服务器中,您将声明更改为:
POST
代替app.post(
答案 1 :(得分:1)
如果您正在使用ExpressJS服务器端,req.body
仅包含从请求的正文中解析的数据。
对于GET
次请求,data
会在查询字符串中发送,因为they aren't expected to have bodies。
GET /controller/method?ids[]=482944&ids[]=...
然后,解析查询字符串并将其分配给req.query
。
console.log('my ids = ' + JSON.stringify(req.query.ids));
// ["482944","335392","482593",...]