UNPKG

mm_os

Version:

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

114 lines (104 loc) 2.71 kB
const compress = require('koa-compress'); const send = require('koa-send'); const { koaBody } = require('koa-body'); const xmlParser = require('mm_xml'); const { session } = require('mm_session'); /** * web基础 * @param {object} server 服务 */ module.exports = { /** * 初始化 * @param {object} adapter 适配器集合 */ init(adapter) { // 参数校验 if (typeof adapter !== 'object') { throw new TypeError('参数类型错误'); } // 获取web服务 var web = adapter.web; // 获取配置 let cg = { ...this.config, ...adapter.web.config }; this._setupFileSend(web); this._setupSession(web, cg); this._setupCompress(web, cg); this._setupParsers(web, cg); }, /** * 设置文件发送 * @private * @param {object} web web服务 */ _setupFileSend(web) { web.use(async (ctx, next) => { // 设置文件发送方法,错误由web_error中间件统一处理 ctx.send = async function (src) { await send(ctx, src); }; await next(); }); }, /** * 设置会话 * @private * @param {object} web web服务 * @param {object} cg 配置 */ _setupSession(web, cg) { // 设置session 保存时长2小时 web.use(session({ max_age: $.login_period || cg.max_age || 7200 })); }, /** * 设置压缩 * @private * @param {object} web web服务 * @param {object} cg 配置 */ _setupCompress(web, cg) { if (cg.compress) { web.use(compress({ filter: (content_type) => /text|json|javascript|css|xml/.test(content_type), thresh: cg.threshold || 1024, gzip: { flush: require('zlib').constants.Z_SYNC_FLUSH }, brotli: { flush: require('zlib').constants.BROTLI_OPERATION_FLUSH } })); } }, /** * 设置解析器 * @private * @param {object} web web服务 * @param {object} cg 配置 */ _setupParsers(web, cg) { // 解析 text/xml web.use(xmlParser()); // 解析请求体 web.use(koaBody({ jsonLimit: cg.json_limit || '20mb', multipart: true, // 必须开启才能解析 form-data urlencoded: true, // 可选:解析 URL 编码的表单 text: true, json: true, // 可选:解析 JSON patchNode: true, patchKoa: true, formidable: { maxFileSize: cg.max_file_size || 2000 * 1024 * 1024 } })); web.use(async (ctx, next) => { if (!ctx.request.body) { ctx.request.body = {}; } await next(); }); } };