No puedo recibir una lista de elementos que coincidan con mi matriz de ID.
Esto es PARTE del código en el componente Angular:
this.orderService.getSpecyficOrders(ids) .subscribe(orders => { ...Donde ids es una matriz de
[{_id : ID },{_id : ID },{_id : ID },] ID es "5235sd23424asd234223sf44" tipo de cadena de documentos MongoDB.
En el archivo de servicio angular que he importado: Http, Encabezados e import 'rxjs/add/operator/map';
Aquí está el código en servicio en Angular:
getSpecyficOrders(ids){ return this.http.get('/api/ordersspecyfic', ids) .map(res => res.json()); }En el archivo expreso, necesito: multer, express,router,mongojs, db
Y aquí hay parte del código en express, llame a 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); }); });Y estoy recibiendo error:
Respuesta no detectada {_body: "TypeError: ids.map no es una función
&n.../node_modules/express/lib/router/index.js:46:12)↵", estado: 500, ok: falso, texto de estado: "Error interno del servidor", encabezados: encabezados...}
Console.log en el archivo express me muestra que req.body es un objeto vacío {}
Por lo que sé, req.body no es una matriz, pero no sé si esto es solo un problema con ese código.
Todas las demás solicitudes de obtener un solo elemento, obtener todos los elementos, etc. funcionan bien. Simplemente no puedo hacer que este funcione ...
Supongo que está tratando de enviar ids a su lado del servidor con
return this.http.get('/api/ordersspecyfic', ids) pero http.get api no funciona así
get (url: cadena, opciones?: RequestOptionsArgs): Observable
Para enviar estos datos a su back-end, debe usar la API de publicación
let headers = new Headers({ 'Content-Type': 'application/json' }); let options = new RequestOptions({ headers: headers }); return this.http.post('/api/ordersspecyfic', ids, options)publicación (url: cadena, cuerpo: cualquiera, opciones?: RequestOptionsArgs): Observable
Fuente: https://angular.io/docs/ts/latest/api/http/index/Http-class.html
Dos errores, backend y frontend.
Dices this.http.get('/api/ordersspecific', ids); . Esto no hace nada, o específicamente, solo intenta obtener /api/ordersspecific . No envía identificadores, su segundo parámetro no coincide con ninguna RequestOptions . En otras palabras, sus identificaciones son ignoradas.
Querrá agregar esto como una cadena de consulta. Consulte aquí cómo agregar parámetros de cadena de consulta. Pero en resumen, sería algo simple como:
return this.http.get('/api/ordersspecyfic?ids=<id1>&ids=<id2>...'Estás leyendo cosas del cuerpo. Es una solicitud GET, no debe haber ningún cuerpo. Lea esto de la cadena de consulta:
router.get('/ordersspecyfic', function(req, res, next){ var ids = req.query.ids; });