使用$ http时如何将数组传递给服务器?

时间:2014-08-30 23:49:43

标签: node.js angularjs

我有一系列要传递给服务器的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,但我不确定。

2 个答案:

答案 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",...]