Search code examples
next.jssentry

Cannot set headers after they are sent to the client sentry


I get an error from sentry.io on this code, i's tell me that I can't set headers after they are sent to the client. It's a next js app

export async function getServerSideProps(ctx) {
  const { res } = ctx

  res.setHeader('Content-Type', 'text/plain')
  res.write('User-agent: *\n')
  res.write('Disallow: \n')
  res.write('Sitemap: https://kalla.com/sitemap.xml\n')
  res.end()

  return {}
}

const Robots = () => null

export default Robots


Solution

  • Response header is only sent once with a request, and if you try to set it and send it again you will get an error. writeHead() can be merged with setHeader(), but the writeHead() has precedence over the latter. WriteHead() acepts these args :writeHead(statusCode, statusMessage, headers), however accepts setHeader(key, value).

     export async function getServerSideProps(ctx) {
      const { res } = ctx
    
      res.setHeader('Content-Type', 'text/plain')
      res.setHeader('User-agent','*\n')
      res.setHeader('Disallow', '\n')
      res.setHeader('Sitemap', 'https://kalla.com/sitemap.xml\n')
      res.end()
    
      return {}
    }
    
     const Robots = () => null
    
     export default Robots