【问题标题】:Route params not getting sent to ExpressJS API路由参数未发送到 ExpressJS API
【发布时间】:2013-06-14 01:35:32
【问题描述】:

我在这方面摸不着头脑。

我正在运行一个以 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 查询中没有传递任何参数。

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

【问题讨论】:

    标签: javascript angularjs express mongoose


    【解决方案1】:

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

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

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

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

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

    /api/request/?_id=XXX
    

    但是你的后端期待这个:

    /api/request/XXX
    

    【讨论】:

    • 做到了。我本可以发誓我是这样设置的,但它仍然存在问题,但可能的情况是我不是,而且伏都教不是真实的。谢谢罗伯特!
    【解决方案2】:

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

    【讨论】:

    • 我仍然在控制台上得到相同的读数,它仍然在提取所有请求:Mongoose: requests.find({}) { fields: undefined, safe: undefined, sort: [ [ '请求日期', 1 ] ] } GET /api/request?_id=51b8cc2a06859bd418000001 200 238ms - 43.29kb
    • 但感谢您指出参数位。我想我最初是这样的,但为了让它发挥作用,我把它改成了 body。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 2018-11-24
    相关资源
    最近更新 更多