UNPKG

mock-service-plugin

Version:
88 lines (85 loc) 2.51 kB
import Mock from 'mockjs'; import fs from 'fs'; // src/response/image-handler.ts var BaseResponseHandler = class { constructor(options = {}) { this.options = options; } /** * 设置响应头 * @param {Response} res - 响应对象 * @param {string} contentType - 内容类型 */ setHeaders(res, contentType) { res.set("Content-Type", contentType); res.set("Access-Control-Allow-Origin", "*"); res.set("Access-Control-Allow-Methods", "GET,HEAD,PUT,POST,DELETE,PATCH"); } /** * 处理文件响应 * @param {string} filePath - 文件路径 * @returns {Promise<Buffer>} */ async readFile(filePath) { return new Promise((resolve, reject) => { fs.readFile(filePath, (err, data) => { if (err) reject(err); else resolve(data); }); }); } /** * 处理错误 * @param {Response} res - 响应对象 * @param {Error} error - 错误对象 */ handleError(res, error) { console.error(`[Response Error] ${error.message}`); res.status(500).json({ error: "Internal Server Error", message: error.message }); } }; // src/response/image-handler.ts var ImageResponseHandler = class extends BaseResponseHandler { async handle(req, res, route) { try { const contentType = this.getContentType(route); this.setHeaders(res, contentType); if (typeof route.responseTemplate === "string") { const imagePath = route.responseTemplate; const imageBuffer = await this.readFile(imagePath); res.send(imageBuffer); return; } const mockData = Mock.mock(route.responseTemplate); if (typeof mockData === "string") { const imagePath = mockData; const imageBuffer = await this.readFile(imagePath); res.send(imageBuffer); return; } throw new Error("Invalid image responseTemplate format"); } catch (error) { this.handleError( res, error instanceof Error ? error : new Error(String(error)) ); } } getContentType(route) { const extension = route.filepath ? route.filepath.split(".").pop()?.toLowerCase() || "" : ""; const contentTypeMap = { png: "image/png", jpg: "image/jpeg", jpeg: "image/jpeg", gif: "image/gif", svg: "image/svg+xml" }; return contentTypeMap[extension] || "image/png"; } }; export { ImageResponseHandler }; //# sourceMappingURL=image-handler.js.map //# sourceMappingURL=image-handler.js.map