使用ids数组表单数据库获取所有匹配项



我无法接收到与我的id数组匹配的项目列表。

这是Angular组件中代码的一部分:

this.orderService.getSpecyficOrders(ids)
.subscribe(orders => { ... 

其中ids是的数组

[{_id : ID },{_id : ID },{_id : ID },]

ID是一种"5235sd23424asd234223sf44"字符串形式的MongoDB文档。

在我导入的角度服务文件中:Http、Headers和导入'rxjs/add/operator/map';

以下是Angular中的服务代码:

getSpecyficOrders(ids){
return this.http.get('/api/ordersspecyfic', ids)
.map(res => res.json());
}

在express文件中,我需要:multer,express,router,mongojs,db

这里是express中的部分代码,调用mongodb:

router.get('/ordersspecyfic', function(req, res, next){
var ids = req.body;
ids = ids.map(function (obj){ return mongojs.ObjectId(obj._id)});
db.orders.find({_id: {$in: ids}}, function(err, orders){
if(err){
res.send(err);
}
res.json(orders);
});
});

我得到了错误:

未捕获的响应{_body:"TypeError:ids.map不是函数
&n…/node_modules/express/lib/router/index.js:46:12)↵",状态:500,确定:false,状态文本:"内部服务器错误",标题:标头…}

Console.log在express文件中正在向我显示req.body是一个空对象{}

据我所知,req.body不是一个数组,但我不知道这是否是该代码的唯一问题。

获取单个元素、获取所有项目等所有其他请求都运行良好。我就是不能让这个工作。。

我假设您正在尝试使用将ids发送到服务器端

return this.http.get('/api/ordersspecyfic', ids)

但是http.getapi不能像那样工作

get(url:string,options?:RequestOptionsArgs):可观察

为了将这些数据发送到后端,您应该使用post-api

let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
return this.http.post('/api/ordersspecyfic', ids, options)

post(url:string,body:any,options?:RequestOptionsArgs):可观察

来源:https://angular.io/docs/ts/latest/api/http/index/Http-class.html

两个错误,后端和前端。

  1. 前端错误

你说this.http.get('/api/ordersspecific', ids);。这什么也不做——或者具体地说,这只是试图获得/api/ordersspecific。它不发送id,您的第二个参数与任何RequestOptions都不匹配。换句话说,您的id将被忽略。

您可能希望将其附加为查询字符串。请在此处查看如何添加querystring参数。但简而言之,这将是一个简单的东西,比如:

return this.http.get('/api/ordersspecyfic?ids=<id1>&ids=<id2>...'
  1. 后端错误

你在读身体里的东西。这是一个GET请求,不应该有正文。从querystring:中读取

router.get('/ordersspecyfic', function(req, res, next){
var ids = req.query.ids;
});

最新更新