0

我正在为此挠头。

我正在运行一个以 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

似乎获取请求正确通过,但在 Mongoose 查询中没有传递任何参数。

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

4

2 回答 2

0

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

于 2013-06-18T01:47:55.517 回答
0

在您的Request函数中,您正在传递_id

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

但是在您的服务中,您期望id

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

这将生成如下所示的请求(这也是您的日志所说的):

/api/request/?_id=XXX

但是您的后端期望这样:

/api/request/XXX
于 2013-06-18T06:26:30.823 回答