/**
|
【自定义允许跨域】:Access-Control-Allow-Origin
|
*/
|
"use strict";
|
|
module.exports = options => {
|
const { whiteList } = options;
|
/**
|
* 如果传入的不是数组,直接抛出错误
|
* */
|
if (!Array.isArray(whiteList)) {
|
throw Error("---------跨域白名单必须设置为数组----------");
|
}
|
|
return async function setOrigin(ctx, next) {
|
if (ctx.request.method === "GET" || ctx.request.method === "OPTIONS") {
|
ctx.response.set("Access-Control-Allow-Methods", "*");
|
ctx.response.set(
|
"Access-Control-Allow-Headers",
|
"*,accesstoken,content-type,guid,nonce,signature,timestamp"
|
);
|
ctx.response.set("Access-Control-Expose-Headers", "*");
|
ctx.response.status = 200;
|
}
|
|
// 当前访问的域名
|
const { origin } = ctx.request.header;
|
// 如果设置成 '*',就给访问的域名设置允许跨域
|
if (whiteList.indexOf("*") > -1) {
|
ctx.response.set("Access-Control-Allow-Origin", origin);
|
} else if (whiteList.indexOf(origin) > -1) {
|
ctx.response.set("Access-Control-Allow-Origin", origin);
|
}
|
await next();
|
};
|
};
|