路线参数没有被发送到ExpressJS API

时间:2013-06-17 23:57:11

标签: javascript angularjs express mongoose

我正在摸不着头脑。

我正在运行一个带有angularjs作为我的前端资源的expressjs站点,我的问题是我已经设置了我的API来使用参数化查询来查询我的数据存储区。当我点击路线时,参数没有出现在我的angularjs资源查询中,所以我最终只是通过id获取整个数据集而不是一个对象。

/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

看来get请求正常,但在Mongoose查询中没有传递参数。

我犯了什么简单的错误,我可以发布哪些其他信息来帮助我弄清楚如何摆脱在墙上敲我头的无限循环?

2 个答案:

答案 0 :(得分:0)

req.body.id用于请求主体,而不是来自请求URI的路由参数。你想要req.params.id

答案 1 :(得分:0)

Request函数中,您传递了_id

Request.query({_id : $routeParams.id});
               ^^^

但在您的服务中,您期待id

$resource('/api/request/:id', {id:'@id'}
                                   ^^^

这会生成看起来像这样的请求(这也是你的日志所说的):

/api/request/?_id=XXX

但你的后端期待这个:

/api/request/XXX