我有一个带有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
});
});
};
我的问题是,为什么我会不断收到“将标头发送到客户端后无法设置标头”的问题,以及如何将查询与限制和跳过一起排序。
最佳答案
之所以会收到此错误,是因为每当发生错误时,都会调用您的if (err)
将response
发送到客户端,然后在条件res.json()
被调用之后再次调用,这会导致错误,因为response
标头已经发送到如果以上条件。
您可以执行以下操作,将if条件与else一起使用。
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
});
}
});
};
关于node.js - NodeJS mongodb查询ERR_HTTP_HEADERS_SENT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59108264/