路由段
前言
之前的文章中已经多次提到了路由段配置项,路由段配置选项可以配置页面、布局、路由处理程序的行为,本篇我们会详细介绍其中的配置内容。
段(Segment)
路由中的每个文件夹都代表一个路由段。每个路由段都映射一个对应的 URL Segment:
在这张图中,/dashboard/settings
由三段组成:
/
:根段(Root Segment)dashboard
:段(Segment)settings
:叶段(Leaf Segment)
路由段配置(Route Segment Config)
接下来我们来到本章的正题——路由段配置。
路由段配置选项可以配置页面、布局、路由处理程序的行为。
比如我们使用 fetch
的时候可以单独配置某个请求的 revalidate
借助路由段配置,我们可以配置这个路由下所有 fetch
请求的 revalidate
。
路由段配置的使用方式也很简单,导出一个约定变量名
即可,比如:
// layout.js | page.js | route.js
export const dynamic = "auto";
export const dynamicParams = true;
export const revalidate = false;
export const fetchCache = "auto";
export const runtime = "nodejs";
export const preferredRegion = "auto";
export const maxDuration = 5;
export default function MyComponent() {}
具体这些变量名和值的类型为:
dynamic
- 类型:
'auto' | 'force-dynamic' | 'error' | 'force-static'
- 默认值:
auto
dynamicParams
类型:
boolean
默认值:
true
fetchCache
类型:
'auto' | 'default-cache' | 'only-cache' | 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store'
默认值:
'auto'
revalidate
类型:
false | 'force-cache' | 0 | number
默认值:
false
runtime
类型:
'nodejs' | 'edge'
默认值:
'nodejs'
preferredRegion
类型:
'auto' | 'global' | 'home' | string | string[]
默认值:
'auto'
maxDuration
类型:
number
默认值: 部署平台设置
注意
注意配置选项的值目前是静态分析的,也就是说,配置 revalidate = 600
是有效的,但是 revalidate = 60 \* 10
是无效的。
参数解释
dynamic
auto
:默认值,Nest.js 会根据路由段中的参数数量来决定是否启用动态路由。force-dynamic
:强制启用动态路由,即使路由段中没有参数。error
:禁用动态路由,如果路由段中有参数,则会返回 404 错误。force-static
:强制禁用动态路由,即使路由段中有参数,也不会返回 404 错误。代码如下:
// layout.js | page.js | route.js
export const dynamic = "auto";
// 'auto' | 'force-dynamic' | 'error' | 'force-static'
dynamicParams
true
:默认值,Nest.js 会根据路由段中的参数数量来决定是否启用动态路由。false
:返回 404
// layout.jsx | page.jsx
export const dynamicParams = true; // true | false,
revalidate
设置布局或者页面的默认验证时间。此设置不会覆盖单个 fetch 请求设置的 revalidate 的值。 注意 revalidate 选项只能用于 Nodejs Runtime,不能用于 Edge Runtime。
// layout.jsx | page.jsx | route.js
export const revalidate = false;
// false | 'force-cache' | 0 | number
false
(默认),语义上相当于 revalidate: Infinity,资源无限期缓存。0
,页面或布局总是动态渲染,即使没有使用动态函数或者不缓存数据请求number
:设置布局或页面的默认重新验证频率,以秒为单位。
关于重新验证频率,一个路由可能有多个布局和一个页面,此时会选择最低的 revalidate
值作为路由的重新验证频率。
这是为了确保子路由的重新验证时间频率和父布局保持一致。
此外,单个 fetch
请求可以设置比路由默认的 revalidate
值更低的 revalidate
值,这会增加整个路由的重新验证频率。
这允许你根据某些动态条件进行更频繁的重新验证。
fetchCache
// layout.jsx | page.jsx | route.js
export const fetchCache = "auto";
// 'auto' | 'default-cache' | 'only-cache'
// 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store'
'auto'(默认):动态函数之前按照开发者设置的 cache 选项进行缓存,动态函数之后不缓存请求
'default-cache':开发者可以自由设置 cache 选项,但如果开发者未设置 cache 选项,默认设置为 force-cache,这意味着即使是在动态函数之后的请求,也会被视为静态
'only-cache':如果开发者未设置 cache 选项,默认设置为 force-cache,如果有请求设置成 cache: 'no-store',则会导致报错
'force-cache':将所有请求的 cache 选项设置为 force-cache 。
'default-no-store':开发者可以自由设置 cache 选项,但如果开发者未设置 cache 选项,默认设置为 no-store,这意味着即使是在动态函数之前的请求,也会被视为动态。
'only-no-store':如果开发者未设置 cache 选项,默认设置为 no-store,如果有请求设置成 cache: 'force-cache',则会导致报错
'force-no-store':将所有请求的 cache 选项设置为 no-store 。
runtime
设置运行时环境
// layout.jsx | page.jsx | route.js
export const runtime = "nodejs";
// 'edge' | 'nodejs'