Javascript 为什么可以';koa路由器不能放在koa cors之前吗? 我使用膝关节炎与NoDE.JS 8.1。

Javascript 为什么可以';koa路由器不能放在koa cors之前吗? 我使用膝关节炎与NoDE.JS 8.1。,javascript,node.js,cors,koa,koa-router,Javascript,Node.js,Cors,Koa,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()) const Koa = require('koa') var cors = require('koa-cors') const app = new Koa() app.use(rout

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

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

app.use(cors(options))
app.use(router.routes())
const Koa = require('koa')
var cors = require('koa-cors')
const app = new Koa()

app.use(router.routes())
app.use(cors(options))
cors可以工作。我可以通过在Postman中发送
origin
标题来验证结果,并获取

访问控制允许源

作为响应头

但是,如果我按以下顺序书写:

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

app.use(cors(options))
app.use(router.routes())
const Koa = require('koa')
var cors = require('koa-cors')
const app = new Koa()

app.use(router.routes())
app.use(cors(options))
cors将无法正常工作


这里有什么问题?我遗漏了什么吗?

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

use()
函数的作用是:

use(fn) {
    this.middleware.push(fn);
    return this;
}
因此,代码的顺序将影响请求处理过程。它将首先将您的请求路由到您的业务代码并作出响应,cors将不会执行


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

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

如果它以任何类似于Express的方式工作,则需要在调用路由器处理请求之前设置cors头。您能解释更多关于“T将首先将请求发送到业务代码,然后响应,CORS将不执行。”有没有可重复的证据表明CORS没有执行?@郭'使用严格的;const KoA=要求(“膝关节炎”);const APP=新KoAh();const MyCORs=函数(CTX,NEXT){控制台。log(“CORS做某事…”);NEXT());const myRouter=function(ctx,next){console.log('business logic…');ctx.body=“respond some data”}app.use(myRouter);app.use(myCors);app.listen(3001);`您可以尝试这个非常简单的实例,然后交换两个中间件并重试。建议您阅读以了解中间件