mock-service-plugin
Version:
54 lines (50 loc) • 2.53 kB
JavaScript
;
var fs = require('fs');
var path = require('path');
var chalk = require('chalk');
var parseMocksFile = require('./parse-mocks-file.js');
var handlerFactory = require('./response/handler-factory.js');
var util = require('./util.js');
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
const responseTemplate = fs.readFileSync(path.join(util.getDirname((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('src/routes.js', document.baseURI).href))), "../index.html"), "utf8");
function createRoutes(mockPath) {
return async function (req, res, next) {
const mockRoutes = parseMocksFile.parseMocksFile(mockPath);
if (req.url === "/") {
return res.send(responseTemplate.replace("@menuList", JSON.stringify(mockRoutes)));
}
// 处理 CORS 预检请求
if (req.method === "OPTIONS") {
res.set("Access-Control-Allow-Origin", "*");
res.set("Access-Control-Allow-Methods", "GET,HEAD,PUT,POST,DELETE,PATCH");
const allowedHeaders = req.headers["access-control-request-headers"];
if (allowedHeaders) {
res.set("Access-Control-Allow-Headers", allowedHeaders);
}
return res.send("");
}
// 查找匹配的路由
const matchedRoute = util.matchRoute(mockRoutes, req.method, req.url);
if (matchedRoute) {
try {
// 获取内容类型
const contentType = matchedRoute.contentType ||
handlerFactory.ResponseHandlerFactory.getContentTypeByExtension(path.extname(matchedRoute.filepath));
// 获取对应的响应处理器
const handler = handlerFactory.ResponseHandlerFactory.getHandler(contentType);
// 处理响应
await handler.handle(req, res, matchedRoute);
console.log(chalk.magentaBright("- [Mock Interface] "), req.url);
}
catch (error) {
console.error(chalk.red(`[Mock Error] Failed to mock response for ${req.url}:`), error);
res.status(500).json({ error: "Failed to generate mock response" });
}
}
else {
next();
}
};
}
exports.createRoutes = createRoutes;
//# sourceMappingURL=routes.js.map