前端请求接口难免遇到跨域问题,让人非常讨厌,如果在后端配置下可跨域,那对前端来说轻松多了,其实koa2配置跨域远比前端简单,下面来看一个前端请求接口跨域的错误提示截图:

允许所有域名跨域访问
1 2
| const cors = require('koa2-cors');// CORS是一个W3C标准,全称是"跨域资源共享"
app.use(cors()); //全部允许跨域 |
你没有看错,就这么简单,在你koa项目入口文件中引入一个中间件koa2-cors,然后执行下它的cors()方法就完了,但考虑到安全性问题,我们上线后并不希望所有人可以去跨域访问接口,那么如何做?
指定单个域名跨域
1 2 3 4 5 6 7 8 9 10 11 12
| app.use(
cors({
origin: function(ctx) { //设置允许来自指定域名请求
return 'http://localhost:8080'; //只允许http://localhost:8080这个域名的请求
},
maxAge: 5, //指定本次预检请求的有效期,单位为秒。
credentials: true, //是否允许发送Cookie
allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], //设置所允许的HTTP请求方法
allowHeaders: ['Content-Type', 'Authorization', 'Accept'], //设置服务器支持的所有头信息字段
exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'] //设置获取其他自定义字段
})
); |
设置多个域名可跨域
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| app .use(
cors ({
origin : function(ctx ) { //设置允许来自指定域名请求
const whiteList = ['http://weipxiu.com','http://localhost:8081']; //可跨域白名单
let url = ctx .header.referer .substr(0,ctx .header.referer .length - 1);
if(whiteList .includes (url )){
return url //注意,这里域名末尾不能带/,否则不成功,所以在之前我把/通过substr干掉了
}
return 'http://localhost::3000' //默认允许本地请求3000端口可跨域
},
maxAge : 5, //指定本次预检请求的有效期,单位为秒。
credentials : true, //是否允许发送Cookie
allowMethods : ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], //设置所允许的HTTP请求方法
allowHeaders : ['Content-Type', 'Authorization', 'Accept'], //设置服务器支持的所有头信息字段
exposeHeaders : ['WWW-Authenticate', 'Server-Authorization'] //设置获取其他自定义字段
})
); |
小结
总体来说还是比前端去弄代理要简单、高效,如果大家项目用上了node中间层,完全也可以这么来搞一波。更多设置可以参考
「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」
共 0 条评论关于"koa2-cors设置允许指定单个域名、多个域名、所有域名跨域"
最新评论