获取错误 - 发送后无法设置标头

时间:2017-01-16 12:02:21

标签: node.js mongoose

我正在尝试使用mongoose查询对我的页面进行分页。但是获取错误无法在发送后设置标头。如果在没有分页的情况下使用,排序工作正常。

我的错误在哪里。这个错误是什么意思?我的代码在下面

app.js

var options = {
    perPage:3,
    delta : 1,
    page:5

};
app.get("/api/Productlist",function(req,res){
    var query = ProductModel.find(function(err,items,count){
        if(err){
            var empty = {}
            res.send(JSON.stringify(empty));
            console.log("cannot finf data");
        }else{
        res.send(JSON.stringify(items));
                }           
 }).sort({"name":1})
    .paginate(options,function(err,items){
        if(err){
            console.log("Cant paginate");
        }
        console.log(items);
    });

2 个答案:

答案 0 :(得分:0)

一些事情:

1)你可以写res.json而不是res.send(JSON.stringify(object));

2)在您的数据库查询中,您将立即调用该函数并在分页完成之前发送响应。我发现,如果你不打算让你的应用程序规模很大,你可以使用跳过和限制,这是一个例子,希望它有所帮助。

yourModel.find().sort({name:1}).skip(0).limit(3).then(data=>{
  if(data.length === 0){
    let err = new Error();
    err.message = "cannot find data";
    err.status = 404;
    res.status(err.status).json(err);
  }
  res.json(data);
});

3)如果你想保留当前的结构,这里有一个例子,你需要只调用一次你的函数,就像这样,不需要再查找然后再分页

ProductModel.find().sort({name:1}).paginate(yourOptions,function(err,items){
   console.log(items)
})

答案 1 :(得分:0)

此代码工作正常,一次仅查询2条记录。但我想在页面编号的html页面上显示记录。如何使用此查询绑定html正文。

ProductModel.find().paginate(2,2).
        exec(function(error,item){
            if(error){
                console.log("Error");
            }else{

                console.log(item);
                res.send(JSON.stringify(item));
            }
    });