我无法接收到与我的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.get
api不能像那样工作
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
两个错误,后端和前端。
- 前端错误
你说this.http.get('/api/ordersspecific', ids);
。这什么也不做——或者具体地说,这只是试图获得/api/ordersspecific
。它不发送id,您的第二个参数与任何RequestOptions都不匹配。换句话说,您的id将被忽略。
您可能希望将其附加为查询字符串。请在此处查看如何添加querystring参数。但简而言之,这将是一个简单的东西,比如:
return this.http.get('/api/ordersspecyfic?ids=<id1>&ids=<id2>...'
- 后端错误
你在读身体里的东西。这是一个GET请求,不应该有正文。从querystring:中读取
router.get('/ordersspecyfic', function(req, res, next){
var ids = req.query.ids;
});