在mongodbselect中使用偏移和限制

这里是我在meanstack中使用的代码来获取有限的数据

apiRouter.get('/pagination_posts', function(req, res){ console.log(req.params) // getting object having value for limit and offset Post.count({},function(err,count){ console.log(count) // total number of records Post.find({}, function(err, posts){ if (err) res.send(err); res.json({total:count,posts:posts}); }).skip(req.query.offset).limit(req.query.limit); }); }); 

获取以下错误:

 events.js:160 throw er; // Unhandled 'error' event ^ Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:356:11) at ServerResponse.header (/Volumes/E/simerjit/fwrkdeploy/node_modules/express/lib/response.js:718:10) at ServerResponse.send (/Volumes/E/simerjit/fwrkdeploy/node_modules/express/lib/response.js:163:12) at ServerResponse.json (/Volumes/E/simerjit/fwrkdeploy/node_modules/express/lib/response.js:249:15) at /Volumes/E/simerjit/fwrkdeploy/server/api/posts.js:29:9 at /Volumes/E/simerjit/fwrkdeploy/node_modules/mongoose/lib/model.js:3822:16 at /Volumes/E/simerjit/fwrkdeploy/node_modules/kareem/index.js:213:48 at /Volumes/E/simerjit/fwrkdeploy/node_modules/kareem/index.js:131:16 at _combinedTickCallback (internal/process/next_tick.js:73:7) at process._tickCallback (internal/process/next_tick.js:104:9) 

如果我在这里使用静态值}).skip(0).limit(10); ,它工作正常,但我想用这个API分页,所以需要通过dynamic限制和抵消。

你必须停止你的asynchronous代码使用return关键字或处理适当的条件stream将缓解你的问题{我正在使用return}

  apiRouter.get('/pagination_posts', function(req, res){ console.log(req.params) // getting object having value for limit and offset Post.count({},function(err,count){ console.log(count) // total number of records Post.find({}, function(err, posts){ if (err) return res.json(err); return res.json({total:count,posts:posts}); }).skip(req.query.offset).limit(req.query.limit); }); }); 

另外明智地保持条件控制stream程

 apiRouter.get('/pagination_posts', function(req, res){ console.log(req.params) // getting object having value for limit and offset Post.count({},function(err,count){ console.log(count) // total number of records Post.find({}, function(err, posts){ if (err) ? res.json(err): res.json({total:count,posts:posts}); }).skip(req.query.offset).limit(req.query.limit); }); });