UNPKG

mm_os

Version:

MM_OS服务端架构,用于快速构建应用程序,支持网站建设、小程序后台、AI应用、物联网(IOT/AIOT)、游戏服务端等多种场景。

88 lines (73 loc) 2.37 kB
// 导出符合系统期望的函数 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(); } };