javascript - Hvorfor kan koa-router ikke sættes før koa-cors?
Jeg bruger Koa med Node.js 8.1.
I dag fandt jeg ud af, at i min app.js, hvis jeg skriver i denne rækkefølge:
const Koa = require('koa')
var cors = require('koa-cors')
const app = new Koa()
app.use(cors(options))
app.use(router.routes())
CORS kan fungere. Jeg kan verificere resultatet ved at sende origin header i Postman og få
Access-Control-Allow-Origin
som svarheader.
Men hvis jeg skriver i denne rækkefølge:
const Koa = require('koa')
var cors = require('koa-cors')
const app = new Koa()
app.use(router.routes())
app.use(cors(options))
CORS vil ikke fungere korrekt.
Hvad er problemet her? Mangler jeg noget?
Svar #1
Hvis du ved, hvad app.use() gør, vil du forstå, hvad der skete.
Hvad use()-funktionen gør, er:
use(fn) {
this.middleware.push(fn);
return this;
}
Så rækkefølgen af din kode vil påvirke behandlingen af forespørgslen. Den vil først dirigere din forespørgsel til din forretningskode og svare, cors vil ikke blive udført.
Som regel bør app.use(router.routes()) være den sidste middleware.
Svar #2
Routerens ruter vil ændre din anmodning og arbejde på svaret på den, så CORS-headers skal indstilles før det, ellers vil det ikke fungere.
