使用req.query.property时,'限制必须指定为数字'错误

时间:2015-04-03 01:21:25

标签: node.js mongodb express mongoose

我正在管道中使用.aggregate进行Mongoose / MongoDB $limit查询。当我使用数字时,如2,它可以正常工作。如果我设置了testNum = 2之类的变量,然后执行{$limit: varNum},那么它可以正常工作。但是,如果我发送REST查询并尝试执行$limit: req.body.show,则表示该值不是数字。

我可以通过console.log看到该值是一​​个数字。管道中的其他查询不会抱怨他们没有给出数字。这是代码:

var show = req.query.show,  // the number of items to show per page
    page = req.query.page,  // the current page being asked for
    stream = req.params.stream, // the type of content to get
    skip = ( page > 0 ? (( page - 1 ) * show ) : 0 ), // amount to skip
    testNum = 3

console.log( show + " " + skip + " " + page )

Content.aggregate( [
    { $unwind: '$users' },
    { $group: { 
        _id: '$_id',
        title: { $first: '$title' },
        description: { $first: '$description' },
        images: { $first: '$images' },
        url: { $first: '$url' },
        saveCount: { $sum: 1 } } 
    },
    { $sort: { saveCount: -1 } },
    { $skip: skip },
    { $limit: show }
] )
.exec()

此处的查询为?show=2&page=1。控制台输出为2 0 1。这是正常的。

完整的错误在这里:

{ [MongoError: exception: the limit must be specified as a number]
name: 'MongoError',
errmsg: 'exception: the limit must be specified as a number',
code: 15957,
ok: 0 }

2 个答案:

答案 0 :(得分:5)

出于某些原因show$limit的情况下被视为字符串,但似乎没有别的想法。我这样做是为了修复它,但我认为这可能是Express或Mongoose / MongoDB的错误。如果有人知道在哪里提起这件事,请告诉我。

修复方法是使用parseInt,如下所示:

var show = parseInt( req.query.show ),  // the number of items to show per page

答案 1 :(得分:1)

您也可以使用一元+运算符。 +req.query.show