app.js
const Koa = require('koa');
const Router = require('koa-router');
const router = new Router();
const app = new Koa();
router.all('*',function (ctx, next) {
ctx.set('Access-Control-Allow-Origin', '*');
ctx.set('Access-Control-Allow-Headers', 'Content-Type, myheader');
ctx.set('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
next();
});
router.post('/api/test/', (ctx, next) => {
ctx.body = {
status: 'success'
}
});
router.post('/api/test2/', (ctx, next) => {
ctx.body = {
status: 'success'
}
});
app.use(router.routes()).use(router.allowedMethods());
app.listen(8089);
console.log('server start at 8089')
前端自定义头部myheader
axios.post(`http://localhost:8089/api/test`, null, { headers: { 'myheader': 'test' }})
.then(response => {
console.log(response.data);
});
后台把所有的接口都设置成 cors,前端是可以自定义头部的。
但是如果我只是让其中一个接口 cors
const Koa = require('koa');
const Router = require('koa-router');
const router = new Router();
const app = new Koa();
router.post('/api/test/', (ctx, next) => {
ctx.set('Access-Control-Allow-Origin', '*');
ctx.set('Access-Control-Allow-Headers', 'Content-Type, myheader');
ctx.set('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
ctx.body = {
status: 'success'
}
});
router.post('/api/test2/', (ctx, next) => {
ctx.body = {
status: 'success'
}
});
app.use(router.routes()).use(router.allowedMethods());
app.listen(8089);
console.log('server start at 8089')
这时前端设置自定义头部,就会报错
No 'Access-Control-Allow-Origin' header
,但是我已经设置过Access-Control-Allow-Headers
了。
如果前端把自定义头部去掉,这时又能跨域成功
// 正常跨域
axios.post(`http://localhost:8089/api/test`)
.then(response => {
console.log(response.data);
});
求解决方法
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.