Node.js NodeJS mongodb查询错误\u HTTP\u头\u已发送

Node.js NodeJS mongodb查询错误\u HTTP\u头\u已发送,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我有一个带有express的nodejs mongoose后端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

我有一个带有express的nodejs mongoose后端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
        });
    });
};
我的问题是,为什么我总是得到“发送到客户机后无法设置标题”,以及如何将查询与限制和跳过一起排序

 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
        });
}
    });
};
事实上,你是在Either案中发送回复的你还错过了其他案件


实际上,您正在发送响应,如果您丢失了其他

您将收到此错误,因为无论何时发生错误,都会调用您的
if(err)
,它将
响应
发送到客户端,然后在调用if condition
res.json()
之后,由于在上述if条件下已发送
响应
头,因此引发错误。 您可以这样做,使用else和if条件

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(err)
,它将
响应
发送到客户端,然后在调用if condition
res.json()
之后再次调用,它会抛出错误,因为上面的if条件中已经发送了
响应
头。 您可以这样做,使用else和if条件

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
        });

}

    });
};

Welp修复了它,谢谢,但现在我有一条错误消息,mongoDB似乎抛出了“投影不能包含和排除的混合”。谢谢,但我刚刚开始工作,因为我的最小值是0,而skip需要启动1。Welp修复了它,谢谢,但现在我有一条mongoDB似乎抛出的错误消息“投影不能有包含和排除的混合。”谢谢,但我刚刚开始工作,因为我的最小值是0,而skip需要开始1。