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

Route params not getting sent to ExpressJS API

本文关键字:ExpressJS API 参数 路由      更新时间:2023-09-26

我很挠头

我正在运行一个expressjs网站与angularjs作为我的前端资源,我的问题是,我已经设置了我的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);
...

/公共/js/控制器/controller.js

...
function Request($scope, $resource, $routeParams, Request)
{
    $scope.request = Request.query({_id : $routeParams.id});
    ...
}
...

/公共/js/服务/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查询中没有传递参数。

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

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

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

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

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

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

/api/request/?_id=XXX

但是你的后端期望这个:

/api/request/XXX

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