export function indexHtmlMiddleware(
server: ViteDevServer
): Connect.NextHandleFunction {
return async (req, res, next) => {
// 抹除 query 信息 和 hash 信息的纯 url
const url = req.url && cleanUrl(req.url)
// spa-fallback always redirects to /index.html
// 如果请求的是 html 资源,同时 header.sec-fetch-dest 不是通过 script 发起的资源请求,则处理并返回
if (url?.endsWith('.html') && req.headers['sec-fetch-dest'] !== 'script') {
const filename = getHtmlFilename(url, server)
if (fs.existsSync(filename)) {
try {
let html = fs.readFileSync(filename, 'utf-8')
html = await server.transformIndexHtml(url, html)
return send(req, res, html, 'html')
} catch (e) {
return next(e)
}
}
}
next()
}
}