HttpStatusCode
编辑此页面HttpStatusCode 在服务器端渲染时为页面响应设置 HTTP 状态码。
import { HttpStatusCode } from "@solidjs/start";
<HttpStatusCode code={404} />;为未匹配路由设置 404 状态码
在页面渲染过程中,你可能想根据具体情况为 Response 设置状态码。
HttpStatusCode 组件通过接收传入的 code 并将其设置为浏览器中的 Response 状态来实现这一功能。
由于 HttpStatusCode 只是一个组件,它可以与 ErrorBoundary、Show、Switch 或其他任何 JSX 控制流组件一起使用。
这意味着用于决定渲染内容的逻辑可以同时用于设置状态码,使这些逻辑能够放在一起。
状态码对于缓存和 SEO 等功能来说是重要的工具,因此发送有意义的状态码是一个好的实践。
例如,对于 NotFound 页面,你应该发送 404 状态码。
import { HttpStatusCode } from "@solidjs/start";
export default function NotFound() { return ( <div> <HttpStatusCode code={404} /> <h1>页面未找到</h1> </div> );}为动态路由中的缺失页面设置 404 状态码
在使用动态路由参数时,如果某个段的给定参数指向缺失的资源,设置 404 状态码是很重要的。 通常,在使用该参数进行异步请求时会发现参数缺失。
可以从这些获取器内部抛出错误,并由访问数据位置最近的 <ErrorBoundary> 组件捕获。
<HttpStatusCode> 与错误边界配合得很好,因为你可以在 ErrorBoundary 的 fallback 中检查错误。
如果获取器抛出表示数据未找到的错误,你可以渲染 <HttpStatusCode code={404} />。
注意,当流式响应 renderStream 时,HTTP 状态只有在流首次刷新之前添加才能被包含。
对于需要在响应之前加载的任何资源调用,添加 deferStream 很重要。
import { Show, ErrorBoundary } from "solid-js";import { query, createAsync } from "@solidjs/router";import { HttpStatusCode } from "@solidjs/start";
const getHouse = query(async (house: string) => { if (house != "gryffindor") { throw new Error("House not found"); } return house;}, "house");
export default function House(props: { name: string }) { const house = createAsync(() => getHouse(props.name), { deferStream: true }); return ( <ErrorBoundary fallback={(e) => ( <Show when={e.message === "House not found"}> <HttpStatusCode code={404} /> </Show> )} > <div>{house()}</div> </ErrorBoundary> );}参数
| 属性 | 类型 | 描述 |
|---|---|---|
| code | number | HTTP 状态码 |