【发布时间】:2020-02-18 02:42:58
【问题描述】:
在出现 404 错误时,我不想显示 404 页面。相反,如果用户已登录,我想重定向回索引页面,如果用户已注销,我想重定向回登录页面。如果未登录,我已经能够将用户从索引页面路由到登录页面,所以我可能只需要重定向到索引页面并让它负责重新路由到登录页面,尽管那必须进行两次重新路由似乎效率低下。
我可以通过将routes/_error.svelte 页面重写到这个来完成它...
<script>
import { onMount } from 'svelte';
onMount(() => {window.location.href = '/'});
</script>
但我不太相信这是完成我想做的事情的最佳方式。它还重定向所有错误,在未来的项目中,我可能希望显示某些错误,例如 404,但重定向其他错误,例如 500。
是否有人对如何使用 Sapper 更好地实现这一点有一些见解?
【问题讨论】:
-
根据 Sapper 文档,
error对象和 HTTPstatus都可用于_error.svelte模板。因此,您可以选择仅在status === 404时重定向,并为其他状态代码显示各种内容。参考这里:sapper.svelte.dev/docs#Error_page -
你认为重定向应该在
_error.svelte模板中使用onMount方法处理,还是在服务器端有不同的方式来完成? -
我在您的解决方案中看到的唯一负面影响是在重定向发生之前有一个“中间”渲染。理想情况下,您可能希望在 server.js 中处理该重定向,但是您必须找到一种方法来区分现有路由(要传递给 sapper 中间件)和不存在的路由(要重定向)。或者也许可以使用
_error.js服务器路由而不是_error.svelte客户端路由来处理错误?没试过,但可能值得研究。
标签: javascript svelte sapper