Я чухаю голову про це.
Я запускаю сайт expressjs з angularjs якмій інтерфейсний ресурс, і моя проблема полягає в тому, що я налаштував свій API на запит до мого сховища даних за допомогою параметризованого запиту. Коли я потрапляю на маршрут, параметр не відображається в моєму запиті ресурсу angularjs, тому в підсумку я просто отримую весь набір даних замість одного об’єкта за ідентифікатором.
/api/index.js:
var _getSingleRequest = function(req, res, next)
{
models.Request
.findOne({"_id": req.body.id})
.exec(function(err, request){
if(err) return res.send(500, err);
if(!request) return res.send(404, new Error("Request not found"));
res.send(request);
});
};
...
return {
_getSingleRequest: getSingleRequest
}
/server.js
...
var api = require("./api");
app.get("/api/request/:id", api.getSingleRequest);
...
/public/js/controllers/controller.js
...
function Request($scope, $resource, $routeParams, Request)
{
$scope.request = Request.query({_id : $routeParams.id});
...
}
...
/public/js/services/services.js
services.Request = function($resource)
{
return $resource("/api/request/:id", {id:"@id"}, {"get": {method:"GET", isArray: true}});
}
консоль
Mongoose: requests.find({}) { fields: undefined, safe: undefined, sort: [ [ "requestedDate", 1 ] ] }
GET /api/request?_id=51b8cc2a06859bd418000001 304 179ms
здається, що запит на отримання надходить належним чином, але в запиті Mongoose параметри не передаються.
яку просту помилку я роблю, і яку іншу інформацію я можу розмістити, щоб допомогти мені зрозуміти, як вийти з нескінченної петлі, що стукає головою об стіну?
Відповіді:
0 для відповіді № 1У твоїй Request
функцію, ви проходите _id
:
Request.query({_id : $routeParams.id});
^^^
Але у вашій службі ви очікуєте id
:
$resource("/api/request/:id", {id:"@id"}
^^^
Це генеруватиме запити, що виглядатимуть так (про що також пише ваш журнал):
/api/request/?_id=XXX
Але ваш сервер очікує цього:
/api/request/XXX
0 для відповіді № 2
req.body.id
призначений для тіла запиту, а не параметрів маршруту, які походять з URI запиту. Ти хочеш req.params.id