为什么koa-router不能放在koa-cors之前呢?

时间:2017-06-27 08:14:24

标签: javascript node.js cors koa koa-router

我将Koa与Node.js 8.1一起使用。

今天我发现在我的app.js中,如果我按此顺序写的话:

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

app.use(cors(options))
app.use(router.routes())
这些人可以工作。我可以通过在Postman中发送origin标头验证结果,然后获取

  

访问控制允许来源

作为回复标题。

但是,如果我按此顺序写:

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

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

cors无法正常工作。

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

2 个答案:

答案 0 :(得分:2)

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

use()函数的作用是:

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

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

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

答案 1 :(得分:2)

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