mockm
Version:
Analog interface server, painless parallel development of front and back ends.
79 lines (72 loc) • 1.76 kB
JavaScript
;
const util = require(`./util/index.js`);
function serverReplay({
allRoute,
allRouteTest
}) {
const config = global.config;
const {
tool,
business
} = util;
const {
middleware,
historyHandle,
saveLog
} = business;
const {
middlewares,
middlewaresObj
} = middleware.getJsonServerMiddlewares();
const {
getHistory
} = historyHandle();
const jsonServer = require(`@wll8/json-server`);
const proxy = require(`http-proxy-middleware`).createProxyMiddleware;
const serverReplay = jsonServer.create();
business.getHttpServer({
app: serverReplay,
name: `replayPort`
});
middleware.reWriteRouter({
app: serverReplay,
routes: config.route
});
serverReplay.use(middlewaresObj.corsMiddleware);
serverReplay.use(proxy((pathname, req) => {
const method = req.method.toLowerCase();
const fullApi = `${method} ${req.originalUrl}`;
const history = getHistory({
fullApi
}).data;
if (history || config.hostMode) {
// 当存在 history 则不进入代理
return false;
} else if (allRouteTest({
allRoute,
method,
pathname
})) {
// 当没有 history, 则使用 noProxy 规则
return true;
} else {
// 当没有 history 也不匹配 noProxy 时, 则根据 replayProxy 规则
return config.replayProxy;
}
}, {
target: `http://127.0.0.1:${config.port}/`,
logLevel: `silent`
}));
serverReplay.use(middlewares);
serverReplay.use(middleware.replayHistoryMiddleware({
business
}));
serverReplay.use((error, req, res, next) => {
saveLog({
logStr: error.stack,
logPath: config._errLog
});
next(error);
});
}
module.exports = serverReplay;