UNPKG

mock-service-plugin

Version:
111 lines (107 loc) 2.93 kB
import Mock from 'mockjs'; import fs from 'fs'; // src/response/sse-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/sse-handler.ts var SseResponseHandler = class extends BaseResponseHandler { async handle(req, res, route) { res.writeHead(200, { "Content-Type": "text/event-stream", "Cache-Control": "no-cache", Connection: "keep-alive" }); const sendEvent = (item) => { let message = ""; if (item.id) message += `id: ${item.id} `; if (item.event) message += `event: ${item.event} `; if (item.data) { const dataStr = typeof item.data === "string" ? item.data : JSON.stringify(item.data); message += `data: ${dataStr} `; } if (item.retry) message += `retry: ${item.retry} `; res.write(message + "\n"); }; try { const mockData = new Function( "return (" + route.responseTemplate + ")" )(); if (mockData) { const data = Mock.mock(mockData); const interval = data.interval || 1e3; if (Array.isArray(data.items)) { let index = 0; const sendNext = () => { if (index < data.items.length) { sendEvent(data.items[index]); index++; setTimeout(sendNext, interval); } else { res.end(); } }; sendNext(); } else { sendEvent({ data }); res.end(); } } else { sendEvent({ data: Mock.mock(mockData) }); res.end(); } } catch (e) { console.error("[SSE Error]:", e); res.write(`data: ${JSON.stringify({ error: "Mock data error" })} `); res.end(); } req.on("close", () => { console.log("Client closed SSE connection"); }); } }; export { SseResponseHandler }; //# sourceMappingURL=sse-handler.js.map //# sourceMappingURL=sse-handler.js.map