Can't remove headers after they are sent Can't remove headers after they are sent mongoose mongoose

Can't remove headers after they are sent


Basically, after you set this.status to 200, it throws an error because this.response.body is probably undefined. Go ahead and console.log() this.response.body and see if it is defined. If it is undefined, I would guess req.body is not being populated correctly OR it is an asynchronous node problem. Basically, eventList.sort() is asynchronously executing as this.response.body = eventList is set. Thus eventList is not sorted yet when you set it. To fix this put it inside eventList.sort() callback.

EDIT: after seeing your comment, I am pretty sure it is asynchronous problem now. Let me know if putting the last two lines inside the sort call works out for you.


The issue is caused by your callback which introduces a race condition since your yield isn't waiting for it to finish. In Koa v1.x, you generally only use a callback API to return a promise.

Here's how you'd write your example with Koa v1.x:

router  .get('/events', function * () {    let events    try {      events = yield Event.find({})    } catch (err) {      this.status = 503      this.body = 'Unable to get events'      return    }    events = sort(events)    this.body = events  // Implicit 200 response  })

Event.find just needs to return something yieldable like a promise. Check to see if the library your using has a promise-returning version.

Though normally you'd just write it like this:

router  .get('/events', function * () {    let events = yield Event.find({})    events = sort(events)    this.body = events  })

Since it's an internal error (500 response) if Event.find is down. Koa will turn uncaught errors into 500 responses.