CoolFace
Apppublic

palapalapla/GT-Manual

sourceHugging Faceupdated 3y agoView on Hugging Face
0likes
plugin.js104 linesDownload Raw Back to lib
1import fs from 'node:fs'2import path from 'node:path'3import YAML from 'yaml'4import multer from 'multer'5import rateLimit from 'express-rate-limit'6 7export default class plugin {8  /**9   * @param name 插件名称10   * @param dsc 插件描述11   * @param priority 插件优先级12   * @param rule.method 请求方法13   * @param rule.path 请求路径14   * @param rule.use 请求处理15   * @param rule.fnc 请求处理16   */17  constructor (data = {}) {18    /** 插件名称 */19    this.name = data.name || ''20    /** 插件描述 */21    this.dsc = data.dsc || ''22    /** 插件优先级 */23    this.priority = data.priority || 524    /** 插件优先级 */25    this.route = data.route || ''26    /** 定时任务,可以是数组 */27    this.task = {28      /** 任务名 */29      name: '',30      /** 任务方法名 */31      fnc: data.task?.fnc || '',32      /** 任务cron表达式 */33      cron: data.task?.cron || ''34    }35    /** 命令规则 */36    this.rule = data.rule || []37  }38 39  /** 读json */40  readJson (filePath, format = 'json') {41    try {42      if (format == 'yaml') {43        return YAML.parse(fs.readFileSync(filePath, 'utf8'))44      }45      return JSON.parse(fs.readFileSync(filePath, 'utf8'))46    } catch (err) {47      return false48    }49  }50 51  /** 写json */52  writeJson (savePath, data, format = 'json') {53    this.mkdir(path.dirname(savePath))54    if (format == 'yaml') return fs.writeFileSync(savePath, YAML.stringify(data))55    return fs.writeFileSync(savePath, JSON.stringify(data, null, 2))56  }57 58  /** 创建文件夹 */59  mkdir (dirname) {60    if (fs.existsSync(dirname)) {61      return true62    } else {63      if (this.mkdir(path.dirname(dirname))) {64        fs.mkdirSync(dirname)65        return true66      }67    }68  }69 70  /** 休眠函数 */71  sleep (ms) {72    return new Promise((resolve) => setTimeout(resolve, ms))73  }74 75  /** 速率限制 */76  limiter (limit = 15, cd = 60, options = {}) {77    options = {78      limit: limit,79      windowMs: cd * 1000,80      legacyHeaders: false,81      message: { status: 1, message: 'Frequent requests, please try again later' },82      ...options83    }84    return rateLimit(options)85  }86 87  /** 文件上传, single, array, any */88  upload (savaPath = './public/upload', filename, options = {}) {89    options = {90      storage: multer.diskStorage({91        destination: (req, file, cb) => {92          cb(null, savaPath)93        },94        filename: filename || ((req, file, cb) => {95          cb(null, Date.now() + path.extname(file.originalname))96        })97      }),98      limits: { fileSize: 5 * 1024 * 1024, files: 1 },99      ...options100    }101    return multer(options)102  }103}104