UNPKG

mock-service-plugin

Version:
54 lines (50 loc) 2.53 kB
'use strict'; 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