Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

use offset and limit in mongodb select

Here is the code that I am using in meanstack to get the limited data

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

Getting following error:

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)

If I am using static values here }).skip(0).limit(10);, it is working fine, but I want to use this api for pagination, so need to pass dynamic limit and offset.

like image 444
Simerjit Parmar Avatar asked Nov 27 '25 23:11

Simerjit Parmar


1 Answers

you have to stop your async code using return keyword or handle the proper condition flow will slove you issue {I am using return below}

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

other wise maintain the Condition controll flow

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);
            });
        });
like image 115
muthukumar selvaraj Avatar answered Nov 29 '25 14:11

muthukumar selvaraj