Javascript 为什么可以';koa路由器不能放在koa cors之前吗? 我使用膝关节炎与NoDE.JS 8.1。
今天我发现在我的app.js中,如果我按以下顺序写: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
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);`您可以尝试这个非常简单的实例,然后交换两个中间件并重试。建议您阅读以了解中间件