@aniyajs/rotor
Version:
基于webpack5开发的一款专注于打包、运行的工具
49 lines (43 loc) • 1.55 kB
JavaScript
const bodyParser = require("body-parser");
const chalk = require("chalk");
const createLocalMockServedMiddleware = (mockData, devServer) => {
return (req, res, next) => {
if (mockData && Object.keys(mockData)?.length > 0) {
devServer.app.use(bodyParser.json());
const newMethodOrUrl = `${req.method.toLowerCase()} ${
req._parsedUrl.pathname
}`;
const methodOrUrls = Object.keys(mockData).map((data) => {
const curData = data.match(/[\S]+/g);
return `${curData[0].toLowerCase()} ${curData[1]}`;
});
if (methodOrUrls.indexOf(newMethodOrUrl) > -1) {
let newMockData = {};
for (const mockMU in mockData) {
const curMockMU = mockMU.match(/[\S]+/g);
Object.assign(newMockData, {
[`${curMockMU[0].toLowerCase()} ${curMockMU[1]}`]: mockData[mockMU],
});
}
const requestApi = newMockData[newMethodOrUrl];
const method = newMethodOrUrl.split(" ")[0];
const url = newMethodOrUrl.split(" ")[1];
devServer.app[method](url, (req, res) => {
if (
Object.prototype.toString.call(requestApi) === "[object Function]"
) {
requestApi(req, res)
.then()
.catch((err) => {
console.log(chalk.red("Mock Error :>> "), err.message || err);
});
} else {
res.send(requestApi);
}
});
}
}
next();
};
};
module.exports = createLocalMockServedMiddleware;