UNPKG

@aniyajs/rotor

Version:

基于webpack5开发的一款专注于打包、运行的工具

54 lines (43 loc) 1.64 kB
const bodyParser = require("body-parser"); const chalk = require("chalk"); const createLocalMockServedMiddleware = (mockData, devServer) => { // body-parser 只挂载一次 let bodyParserApplied = false; return (req, res, next) => { if (!mockData || Object.keys(mockData).length === 0) { return next(); } if (!bodyParserApplied) { devServer.app.use(bodyParser.json()); bodyParserApplied = true; } const newMethodOrUrl = `${req.method.toLowerCase()} ${req._parsedUrl.pathname}`; // 构建标准化的 mock 路由映射 let normalizedMockData = {}; for (const mockMU in mockData) { const curMockMU = mockMU.match(/[\S]+/g); if (curMockMU && curMockMU.length >= 2) { normalizedMockData[`${curMockMU[0].toLowerCase()} ${curMockMU[1]}`] = mockData[mockMU]; } } const requestApi = normalizedMockData[newMethodOrUrl]; if (requestApi === undefined) { return next(); } // 直接在当前中间件中处理响应,不注册新路由 const apiType = Object.prototype.toString.call(requestApi); if (apiType === "[object Function]") { requestApi(req, res); } else if (apiType === "[object AsyncFunction]") { requestApi(req, res).catch((err) => { console.log(chalk.red("Mock Error :>> "), err.message || err); if (!res.headersSent) { res.status(500).json({ error: err.message || "Mock handler error" }); } }); } else { res.json(requestApi); } }; }; module.exports = createLocalMockServedMiddleware;