4

我在 Node.js 8.1 中使用 Koa。

今天发现在我的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我可以通过在 Postman 中发送标头来验证结果,并得到

访问控制允许来源

作为响应头。

但是,如果我按这个顺序写:

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

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

cors 将无法正常工作。

这里有什么问题?我错过了什么吗?

4

2 回答 2

4

如果你知道发生了什么app.use(),你就会明白发生了什么。

use()函数的作用是:

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

因此,您的代码顺序会影响请求处理过程。它将首先将您的请求路由到您的业务代码并做出响应,不会执行 cors。

通常,app.use(router.routes())应该是最后一个中间件。

于 2017-06-27T08:26:58.907 回答
3

路由器路由将修改您的请求并对其响应进行操作,因此需要在此之前设置 cors 标头,否则它将不起作用。

于 2017-06-27T08:28:21.817 回答