import getHtmlGenerator from '../getHtmlGenerator'; import chunksToMap from '../build/chunksToMap'; const debug = require('debug')('umi-build-dev:createRouteMiddleware'); export default function createRouteMiddleware(service) { return (req, res, next) => { const { path, method } = req; function sendHtml() { if (!service.__chunks) { setTimeout(sendHtml, 300); return; } const chunksMap = chunksToMap(service.__chunks); const htmlGenerator = getHtmlGenerator(service, { chunksMap, }); const content = htmlGenerator.getMatchedContent(normalizePath(path, service.config.base)); res.setHeader('Content-Type', 'text/html'); res.send(content); } if (path === '/favicon.ico') { next(); } else { debug(`[${method}] ${path}`); if (path === '/__umiDev/routes') { res.setHeader('Content-Type', 'text/json'); res.send(JSON.stringify(service.routes)); } else { sendHtml(); } } }; } function normalizePath(path, base = '/') { if (path.startsWith(base)) { path = path.replace(base, '/'); } return path; }