Deno Fresh是否支持在routes目录中直接提供HTML文件?
问题解答
核心结论
是的,Fresh框架的路由系统必须依赖JS/TS(.tsx/.jsx/.ts/.js)文件定义路由规则,直接将.html文件放在routes目录下不会被框架识别,这就是你访问出现404的原因。
更安全的替代方案
既然你不想使用存在安全风险的dangerouslySetInnerHTML,可以尝试以下两种合规且安全的方式:
1. 转换为TSX组件(推荐)
将test.html的内容直接迁移到routes目录下的.tsx文件中,完全遵循Fresh的路由规范:
// routes/test.tsx export default function TestPage() { return ( <div> {/* 把test.html里的所有内容直接复制到此处 */} <h1>Test Page</h1> <p>原HTML中的标签、文本都可以直接在这里编写</p> </div> ); }
完成后访问localhost:8000/test即可正常加载页面,无需担心安全问题。
2. 通过配置文件映射静态HTML路由
如果HTML内容较大,不想手动转换,可以在Fresh配置文件中添加路由映射,直接返回静态HTML文件:
// fresh.config.ts import { defineConfig } from "$fresh/server.ts"; export default defineConfig({ routes: [ { path: "/test", handler: async () => { const htmlContent = await Deno.readTextFile("./static/test.html"); return new Response(htmlContent, { headers: { "Content-Type": "text/html; charset=utf-8", }, }); }, }, ], });
这种方式通过原生Response返回HTML,规避了React的dangerouslySetInnerHTML风险,同时让localhost:8000/test可以正常访问。
为什么routes目录不识别.html文件?
Fresh的文件系统路由仅扫描.tsx/.jsx/.ts/.js后缀的文件作为路由入口,框架会根据这些文件的路径和文件名自动生成路由规则。.html文件不在框架的路由识别范围内,因此访问对应路径会返回404。
内容的提问来源于stack exchange,提问作者Ooker
相关产品推荐
相关产品推荐

