如何在客户端路由以文件扩展名结尾的url



假设用户将注释的标题命名为"onboarding.md"。

url的结果是这样的localhost:4000/ecme/onboarding.md

现在,在刷新该url后,我希望我的客户端路由器能够处理它——加载一个组件,通过fetch调用一个api,然后将结果加载到组件中。

但是我得到一个空白页面,其中有一个错误Cannot GET /ecme/onboarding.md

如果我以编程方式导航到注释,则不会出现此类错误。

你不能,至少不是真的。

如果用户正在刷新页面,则浏览器正在向服务器请求该URL。

你的客户端路由器甚至还没有加载。


当您使用客户端路由时;真实的";URL(与哈希路由相反,在哈希路由中,所有路由数据都保存在片段标识符中(,则也必须具有服务器支持

良好的路由器支持将使用服务器端渲染,因此页面将从服务器完整地交付,而不是在客户端生成。这是高效的(不需要提供引导页面,然后让客户端完成所有工作并对数据发出额外的HTTP请求(,搜索引擎友好,这意味着如果JS因任何原因失败,那么该页面仍然可以访问。

对于大多数常见的SPA框架(例如React有Next.js(,都有支持这一点的框架


如果你想绕过SSR,快速而肮脏的方法是只配置服务器来提供引导HTML文档,该文档为请求的每个URL(或者至少是与文件无关的URL(运行客户端代码。这并没有上面列出的好处,而且最终会给客户(包括搜索引擎(一个HTML文档,即使他们会出现404 Not Found错误。

最新更新