我有一个带有express的nodejs mongoose后端api,其目标是,对于每个网站页面,它返回一定数量的按ID排序的对象。
我的问题比较简单,但是更容易举例说明。假设用户选择在第 0 页上每页显示 20 个对象。API 将从 mongoDB 集合中返回前 20 个对象(0 到 19)。第 2 页包含 20 将返回按 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
});
});
};
我的问题是,为什么我不断收到“将 header 发送到客户端后无法设置 header ”的信息,以及如何对查询与限制和跳过进行排序。
最佳答案
您之所以收到此错误,是因为每当发生错误时,您的 if (err)
就会被调用,它将 response
发送到客户端,然后在 if 条件 res.json()
被调用后再次调用,这会抛出错误,因为 response
header 已经在上面的 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
});
}
});
};
关于node.js - NodeJS mongodb查询ERR_HTTP_HEADERS_SENT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59108264/