【问题标题】:Node.js Mongoose and using find with request.paramsNode.js Mongoose 并使用 find 和 request.params
【发布时间】:2012-04-01 07:03:01
【问题描述】:

我在 MongoDB 中存储了两个集合:Markers 和 Pois

MarkerID 在 Pois 中是外键,在 Markers 中是主键。

我想返回带有某个 Marker ID 的 Pois

我可以在 MongoDB 控制台中执行此操作:

>db.PoiPois.find({"MarkerID":78})

我还可以使用快速 RESTful 路由和 Mongoose 在 Node.js 应用程序中通过硬编码查询来做到这一点:

app.get('/pois/:markerid', function(req, res) {
 poiModel.find({MarkerID:78}, function (err,pois) {
        res.contentType('json');
    res.json({
        success: true,
      data: pois

    });
 });
});

我想将硬编码查询替换为动态查询,使用 markerid 的请求参数,请执行以下操作:

poiModel.find({MarkerID:req.params.markerid}, function (err,pois) {

但这不起作用(返回空 json)。

我哪里错了?感谢您的帮助

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    我猜req.params.markerid 是一个字符串。尝试将其转换为整数。

    【讨论】:

    • 是的。最简单的方法是{MarkerID: +req.params.markerid}
    • @danmactough:哇,好把戏!它可靠吗?任何陷阱(与parseInt 相比)? :)
    • Sergio,我想我会很舒服地使用它,因为我知道我希望给它什么样的字符串。从某种意义上说,它比parseInt 更“可靠”,因为带有前导零的字符串仍然使用基数 10 进行转换。此外,它会转换带小数的字符串,例如 parseFloat。不过,说实话,在 db 查询中,我会在获得查询参数之前执行一些验证。
    • 所有有用的 cmets。谢谢你。对我有用的代码是 app.get('/pois/:markerid', function(req, res) { poiModel.find({MarkerID: +req.params.markerid}, function (err,pois) { res. contentType('json'); res.json({ success: true, data: pois }); }); });在我的无知中,我在我的网址中使用了一个不必要的冒号://localhost:5000/pois/:1234。这显然使 req.params.markerid = ":1234" 的值
    猜你喜欢
    • 2011-11-17
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 2014-08-02
    相关资源
    最近更新 更多