2017-06-27 3 views
0

Ich benutze Koa mit Node.js 8.1.Warum kann koa-router nicht vor koa-cors gesetzt werden?

Heute fand ich, dass in meinem app.js, wenn ich in dieser Reihenfolge schreiben:

const Koa = require('koa') 
var cors = require('koa-cors') 
const app = new Koa() 

app.use(cors(options)) 
app.use(router.routes()) 

die cors arbeiten können. Ich kann das Ergebnis über das Senden origin Header in Postman, überprüfen und

Access-Control-Allow-Origin

als Response-Header erhalten.

Allerdings, wenn ich in dieser Reihenfolge schreiben:

const Koa = require('koa') 
var cors = require('koa-cors') 
const app = new Koa() 

app.use(router.routes()) 
app.use(cors(options)) 

cors funktioniert nicht richtig.

Was ist das Problem hier? AM Ich vermisse etwas?

+0

Wenn es in ähnlicher Weise wie Express funktioniert, müssen die CORS-Header _before_ gesetzt werden, bevor der Router zur Bearbeitung der Anfrage aufgerufen wird. – robertklep

Antwort

2

Wenn Sie wissen, was app.use() tut, werden Sie verstehen, was passiert ist.

Was die use() Funktion zu tun ist:

use(fn) { 
    this.middleware.push(fn); 
    return this; 
} 

die Sequenz des Codes So wird die Anfrage Griff Prozess beeinflussen. Es leitet Ihre Anfrage zuerst an Ihren Geschäftscode weiter und antwortet, cors wird nicht ausgeführt.

Normalerweise sollte die app.use(router.routes()) die letzte Middleware sein.

+0

Könnten Sie mehr darüber erklären, dass Sie Ihre Anfrage zuerst an Ihren Unternehmenscode weiterleiten und dann antworten, cors wird nicht ausgeführt? Gibt es reproduzierbare Beweise, dass Kors nicht ausgeführt wurde? – guo

+0

@guo ' 'verwenden Sie streng'; const Koa = erfordern ('koa'); const app = neu Koa(); const myCors = Funktion (ctx, nächste) { console.log ('cors tun etwas ...'); next(); } const myRouter = Funktion (ctx, next) { console.log ('Geschäftslogik ...'); ctx.body = "einige Daten antworten"; } app.use (myRouter); app.use (myCors); App.listen (3001); ' Sie können diese sehr einfache Instanz versuchen und dann zwei Middleware austauschen und es erneut versuchen. Schlagen Sie vor, [koa guide] (https://github.com/koajs/koa/blob/master/docs/guide.md) zu lesen, um Middleware zu verstehen –

1

Die Routen des Routers werden Ihre Anfrage ändern und auf die Antwort davon reagieren, also müssen die Kors-Header vorher gesetzt werden, sonst wird es nicht funktionieren.

Verwandte Themen