2017-06-27 13 views
0

私はKoaをNode.js 8.1で使用します。koa-corsの前にkoa-routerを置くことができないのはなぜですか?

今日、私はこの順番で書くならば、私のapp.jsで、ことがわかった:

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

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

CORSが動作することができます。私は、ポストマンにoriginヘッダの送信を介して結果を確認し、レスポンスヘッダとして

アクセス制御 - 許可原点

を得ることができます。

私はこの順番で書く場合は、:

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

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

CORSが正しく動作しません。

ここで問題は何ですか?私は何かを欠いている?

+0

Expressと同様の方法で動作する場合、CORSヘッダーはルータが要求を処理するために呼び出される前に設定する必要があります。 – robertklep

答えて

2

app.use()が何であるか知っていれば、何が起こったのか理解できます。 use()機能は何

は次のとおりです。

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

だから、あなたのコードのシーケンスが要求ハンドルのプロセスに影響を与えます。あなたの要求をまずあなたのビジネスコードにルーティングして応答しますが、コードは実行されません。

一般に、app.use(router.routes())は最後のミドルウェアである必要があります。

+0

「あなたのビジネスコードにリクエストをルーティングして応答する、コルが実行されない」ということについてもっと説明できますか? corsが実行されないことを示す再現可能な証拠はありますか? – guo

+0

@guo ' ' use strict '; const Koa = require( 'koa'); const app = new Koa(); const myCors = function(ctx、next){ console.log( 'cors do something ...'); next(); } const myRouter = function(ctx、next){ console.log( 'ビジネスロジック...'); ctx.body = "一部のデータに応答します"; } app.use(myRouter); app.use(myCors); app.listen(3001); ' この非常に単純なインスタンスを試してから、2つのミドルウェアを交換して再試行できます。ミドルウェアを理解するために[koa guide](https://github.com/koajs/koa/blob/master/docs/guide.md)を読むことをお勧めします –

1

ルーターのルートは要求を変更して応答するため、その前にcorsヘッダーを設定する必要があります。それ以外の場合は動作しません。

関連する問題