Skip to content
Our Sponsors
Open in Anthropic

title: 你的第一个路由 - Elysia 教程 layout: false search: false authors: [] head: - - meta - property: 'og:title' content: 你的第一个路由 - Elysia 教程

- - meta
  - name: 'description'
    content: Elysia 中有 3 种路径类型:静态路径、动态路径和通配符。学习如何使用它们来创建你的第一个路由。

- - meta
  - property: 'og:description'
    content: Elysia 中有 3 种路径类型:静态路径、动态路径和通配符。学习如何使用它们来创建你的第一个路由。

你的第一个路由

当我们访问一个网站时,它需要

  1. 路径//about/contact
  2. 方法GETPOSTDELETE

来确定要显示哪个资源,这简单地称为 “路由”

在 Elysia 中,我们可以通过以下方式定义一个路由:

  1. 调用以 HTTP 方法命名的方法
  2. 路径作为第一个参数
  3. 处理函数作为第二个参数
typescript
import { Elysia } from 'elysia'

new Elysia()
	.get('/', '你好,世界!')
	.listen(3000)

路由

Elysia 中的路径可以分为 3 种类型:

  1. 静态路径 - 用于定位资源的静态字符串
  2. 动态路径 - 路径段可以是任何值
  3. 通配符 - 特定点之前的路径可以是任何内容

参见 路由

静态路径

静态路径是硬编码的字符串,用于定位服务器上的资源。

ts
import { Elysia } from 'elysia'

new Elysia()
	.get('/hello', 'hello')
	.get('/hi', 'hi')
	.listen(3000)

参见 静态路径

动态路径

动态路径匹配路径的某一部分并捕获其值,以提取额外信息。

要定义动态路径,我们可以使用冒号 : 后跟一个名称。

typescript
import { 
Elysia
} from 'elysia'
new
Elysia
()
.
get
('/id/:id', ({
params
: {
id
} }) =>
id
)
.
listen
(3000)

这里,我们使用 /id/:id 创建了一个动态路径。这告诉 Elysia 捕获 :id 路径段的值,例如 /id/1/id/123/id/anything

localhost

GET

1

参见 动态路径

可选路径参数

我们可以通过在参数名称后添加问号 ? 来使路径参数变为可选。

typescript
import { 
Elysia
} from 'elysia'
new
Elysia
()
.
get
('/id/:id?', ({
params
: {
id
} }) => `id: ${
id
}`)
.
listen
(3000)
localhost

GET

参见 可选路径参数

通配符

动态路径允许捕获单个路径段,而通配符允许捕获路径的其余部分。

要定义通配符,我们可以使用星号 *

typescript
import { 
Elysia
} from 'elysia'
new
Elysia
()
.
get
('/id/*', ({
params
}) =>
params
['*'])
.
listen
(3000)
localhost

GET

1

参见 通配符

练习

让我们回顾一下,并创建 3 个不同类型的路径:

  1. Static Route

    Create a static route "/elysia" with response "Hello Elysia!"

  2. Dynamic Route

    Create a dynamic route "/friends/:name" with response "Hello ${name}!"

  3. Optional Dynamic Route

    modify "/friends/:name" to accept optional parameter

  4. Wildcard Route

    Create a wildcard route "/flame-chasers/*" with response of anything

Show answer
  1. 静态路径 /elysia,响应为 "Hello Elysia!"
  2. 动态路径 /friends/:name?,响应为 "Hello {name}!"
  3. 通配符路径 /flame-chasers/*,响应为路径的其余部分。
typescript
import { Elysia } from 'elysia'

new Elysia()
	.get('/elysia', '你好,Elysia!')
	.get('/friends/:name?', ({ params: { name } }) => `你好,${name}!`)
	.get('/flame-chasers/*', ({ params }) => params['*'])
	.listen(3000)
  • index.ts