node.jskoa2

Koa is being executed twice per request?


Is there any reason why Koa is being executed twice per request?

const Koa = require('koa')
const app = new Koa()

const index = async(ctx, next) => {
  console.log('Hello world!')
  await next()
  ctx.body = 'Hello world!'
}

app.use(index);

app.listen(3000)

On my terminal, I get:

Hello world!
Hello world!

Any ideas?


Solution

  • There are two reasons why this could happen:

    First is - as already mentioned in the comments that browsers also fire a request for favicon.ico Second: some browsers do a prefentching, so before you even hit the return key, they prefetch the url when entering.

    const Koa = require('koa')
    const app = new Koa()
    
    const index = async(ctx, next) => {
      console.log('URL --> ' + ctx.request.url); // This logs out the requested route
      console.log('Hello world!')
      await next()
      ctx.body = 'Hello world!'
    }
    
    app.use(index);
    
    app.listen(3000)
    

    I added one line to your code so that you can see which routes your browser asks for. This might help identify the reason for your problem.