mock-service-plugin
Version:
Simulated backend interface service
81 lines (78 loc) • 2.19 kB
JavaScript
import Mock from 'mockjs';
import fs from 'fs';
// src/response/text-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/text-handler.ts
var TextResponseHandler = class extends BaseResponseHandler {
async handle(req, res, route) {
try {
const contentType = this.getContentType(route);
this.setHeaders(res, contentType);
if (typeof route.responseTemplate === "string") {
res.send(route.responseTemplate);
return;
}
const mockData = Mock.mock(route.responseTemplate);
res.send(mockData);
return;
} 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 = {
txt: "text/plain",
html: "text/html",
md: "text/markdown",
css: "text/css",
js: "application/javascript"
};
return contentTypeMap[extension] || "text/plain";
}
};
export { TextResponseHandler };
//# sourceMappingURL=text-handler.js.map
//# sourceMappingURL=text-handler.js.map