NodeJS mongodb查询ERR_HTTP_HEADERS_SENT

时间:2019-11-29 16:25:39

标签: node.js mongodb express mongoose

我有一个带有express的nodejs猫鼬后端api,其目的是对于每个网站页面,它返回一定数量的按ID排序的对象。

我的问题相对简单,但是更容易举例说明。假设用户选择每页显示20个对象,并且该页面位于第0页。api将返回mongoDB集合中的前20个对象(0到19)。具有20的第2页将返回ID排序的下20个对象(对象20至39)。

现在代码如下:

 var page = (req.query.page) ? parseInt(req.query.page) : 0;
    var qtd = (req.query.qtt) ? parseInt(req.query.qtt) : 20;
    var min_value = page * qtd;
    var max_value =( page + 1 ) * qtd - 1;

    Order.find({}, {skip:min_value,limit:max_value}, function(err,orders) {
        if (err) {
            res.json({
                status: "error",
                message: err,
            });
        }
        res.json({
            status: "success",
            message: "Orders retrieved successfully",
            data: orders
        });
    });
};

我的问题是,为什么我会不断收到“将标头发送到客户端后无法设置标头”以及如何将查询与限制和跳过一起排序。

2 个答案:

答案 0 :(得分:0)

 var page = (req.query.page) ? parseInt(req.query.page) : 0;
    var qtd = (req.query.qtt) ? parseInt(req.query.qtt) : 20;
    var min_value = page * qtd;
    var max_value =( page + 1 ) * qtd - 1;

    Order.find({}, {skip:min_value,limit:max_value}, function(err,orders) {
        if (err) {
            res.json({
                status: "error",
                message: err,
            });
        }
else{
        res.json({
            status: "success",
            message: "Orders retrieved successfully",
            data: orders
        });
}
    });
};

实际上,在其他情况下您正在发送答复

答案 1 :(得分:0)

您收到此错误的原因是,每当发生错误时,都会调用您的if (err),该response会向客户端发送res.json(),然后在条件response被调用后再次发送{ var page = (req.query.page) ? parseInt(req.query.page) : 0; var qtd = (req.query.qtt) ? parseInt(req.query.qtt) : 20; var min_value = page * qtd; var max_value =( page + 1 ) * qtd - 1; Order.find({}, {skip:min_value,limit:max_value}, function(err,orders) { if (err) { res.json({ status: "error", message: err, }); } else{ res.json({ status: "success", message: "Orders retrieved successfully", data: orders }); } }); }; 个标头已在上述if条件中发送。 您可以执行以下操作,将if条件与else一起使用。

{{1}}