我无法接收与我的ids数组匹配的项目列表。
这是Angular组件中的代码的一部分:
this.orderService.getSpecyficOrders(ids)
.subscribe(orders => { ...
其中id是
的数组[{_id : ID },{_id : ID },{_id : ID },]
ID是"5235sd23424asd234223sf44"
种类型的MongoDB文档字符串。
在我已导入的角度服务文件中: Http,Headers和import'rxjs / add / operator / map';
以下是Angular中的服务代码:
getSpecyficOrders(ids){
return this.http.get('/api/ordersspecyfic', ids)
.map(res => res.json());
}
在快递文件中我需要: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,ok:false,statusText:“内部服务器错误”,标题: 集管...}
快递文件中的Console.log 告诉我req.body是一个空对象{}
据我所知req.body
不是数组,但我不知道这是否只是该代码的问题。
所有其他要求获取单个元素,获取所有项目等都正常工作。 我只是不能让这个工作..
答案 0 :(得分:2)
我假设您尝试使用
将ids
发送到服务器端
return this.http.get('/api/ordersspecyfic', ids)
但http.get
api并不像那样
get(url:string,options?:RequestOptionsArgs):Observable
要将此数据发送到您的后端,您应该使用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):Observable
来源:https://angular.io/docs/ts/latest/api/http/index/Http-class.html
答案 1 :(得分:1)
两个错误,后端和前端。
你说this.http.get('/api/ordersspecific', ids);
。这没有任何作用 - 或者具体地说,这只是试图得到/api/ordersspecific
。它没有发送ID,您的第二个参数与任何RequestOptions都不匹配。换句话说,你的id被忽略了。
您希望将此附加为查询字符串。检查here如何添加查询字符串参数。但简而言之,它就像是一样简单:
return this.http.get('/api/ordersspecyfic?ids=<id1>&ids=<id2>...'
你正在读取身体上的东西。这是一个GET请求,应该没有正文。从querystring中读取这个:
router.get('/ordersspecyfic', function(req, res, next){
var ids = req.query.ids;
});