mm_os
Version:
MM_OS服务端架构,用于快速构建应用程序,支持网站建设、小程序后台、AI应用、物联网(IOT/AIOT)、游戏服务端等多种场景。
88 lines (73 loc) • 2.37 kB
JavaScript
// 导出符合系统期望的函数
module.exports = {
/**
* 初始化
* @param {object} adapter 适配器对象
*/
init(adapter) {
// 获取web服务
// var web = adapter.web;
// 获取配置
this.config = { ...this.config, ...adapter.web.config };
},
/**
* CORS跨域中间件
* 处理跨域资源共享(CORS)配置
* @param {object} ctx Koa上下文
* @param {object} config CORS配置
*/
_setCorsHeaders(ctx, config) {
// 设置Access-Control-Allow-Origin
if (config.origin === '*') {
ctx.set('Access-Control-Allow-Origin', '*');
} else if (Array.isArray(config.origin)) {
let request_origin = ctx.get('Origin');
if (config.origin.includes(request_origin)) {
ctx.set('Access-Control-Allow-Origin', request_origin);
}
} else {
ctx.set('Access-Control-Allow-Origin', config.origin);
}
// 设置Access-Control-Allow-Headers
if (config.headers === '*') {
ctx.set('Access-Control-Allow-Headers', '*');
} else if (Array.isArray(config.headers)) {
ctx.set('Access-Control-Allow-Headers', config.headers.join(', '));
} else {
ctx.set('Access-Control-Allow-Headers', config.headers);
}
// 设置Access-Control-Allow-Methods
ctx.set('Access-Control-Allow-Methods', config.methods.join(', '));
// 设置Access-Control-Allow-Credentials
if (config.credentials) {
ctx.set('Access-Control-Allow-Credentials', 'true');
}
// 设置Access-Control-Max-Age
if (config.max_age > 0) {
ctx.set('Access-Control-Max-Age', config.max_age.toString());
}
// 设置Access-Control-Expose-Headers
if (config.expose_headers.length > 0) {
ctx.set('Access-Control-Expose-Headers', config.expose_headers.join(', '));
}
},
async main(ctx, next) {
let config = this.config;
if (!config.enable) {
return await next();
}
// 检查是否应该忽略该路径
let path = ctx.path;
if (config.ignore_paths.some(p => path.startsWith(p))) {
return await next();
}
// 设置CORS头
this._setCorsHeaders(ctx, config);
// 处理预检请求
if (ctx.method === 'OPTIONS') {
ctx.status = 204;
return;
}
await next();
}
};