首页 文章

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

提问于
浏览
0

我使用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())

cors可以工作 . 我可以通过在Postman中发送 origin 标头验证结果,然后获取

Access-Control-Allow-Origin

作为响应 Headers .

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

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

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

cors无法正常工作 .

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

2 回答

  • 2

    如果你知道 app.use() 的作用,你会明白发生了什么 .

    use() 函数的作用是:

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

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

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

  • 1

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

相关问题