Skip to content

服务器 (Server)

TIP

提供此服务的插件:@cordisjs/plugin-server。

配置拦截

config.path

  • 类型: string
  • 默认值: ''

所有路由的公共前缀。

实例方法

ctx.server[method](path, middleware)

  • method: string 请求方法,如 get, post
  • middleware: Middleware 中间件
  • 返回值: Route

定义 HTTP 路由。

ctx.server.ws(path, handler)

  • path: string 路由
  • handler: WsHandler 回调函数
  • 返回值: Route

定义 WebSocket 路由。其中 handler 类型如下:

ts
type 
WsHandler
<
P
= any> = (
req
:
Request
& {
params
:
P
},
accept
: () =>
Promise
<WebSocket>,
) => void |
Promise
<void>

对于给定的 WebSocket 请求,所有匹配该请求的路由都会调用 handler 函数。如果任何一个 handler 内调用了 accept,则会创建 WebSocket 连接。如果没有任何 accept 被调用,请求将被拒绝。下面是一个简单的示例:

ts
ctx
.
server
.
ws
('/path', async (
req
,
accept
) => {
if (!
validate
(
req
)) return
const
socket
= await
accept
()
socket
.
addEventListener
('message', (
data
) => {
console
.
log
('received:',
data
)
}) })

类:Request

Request 对象包含请求信息,提供了一种接近 Web API 的封装。

req.method 只读

  • 类型: string

大写字母表示的请求方法,如 GET, POST 等。

req.headers 只读

请求头。

req.params 只读

  • 类型: Record<string, string> | RegExpExecArray

路由匹配结果。如果路由是字符串,则是一个包含所有路由参数的对象;如果是正则表达式,则是一个 RegExpExecArray。仅在路由中间件中有效。

req.body 只读

请求体可读流。

req.bodyUsed 只读

  • 类型: boolean

请求体是否已被消费。

req.arrayBuffer()

  • 返回值: Promise<ArrayBuffer>

解析请求体为 ArrayBuffer

req.blob()

  • 返回值: Promise<Blob>

解析请求体为 Blob

req.bytes()

  • 返回值: Promise<Uint8Array>

解析请求体为 Uint8Array

req.formData()

  • 返回值: Promise<FormData>

解析请求体为 FormData

req.json()

  • 返回值: Promise<any>

解析请求体为 JSON。

req.text()

  • 返回值: Promise<string>

解析请求体为文本。

类:Response

res.status

  • 类型: number

响应状态码。未手动设置此值时,默认行为如下:

  • 如果存在与请求相匹配的路由和方法:
    • 如果 res.body 不为空,则默认值为 200
    • 如果 res.body 为空,则默认值为 204
    • 用户可以在中间件中手动设置此值;
  • 如果存在相匹配的路由,但是方法不匹配,则设置为 405
  • 如果不存在相匹配的路由,则设置为 404
  • 如果中间件抛出未识别的错误,则设置为 500

res.statusText

  • 类型: string

响应状态文本。

res.headers

响应头。

res.ok 只读

  • 类型: boolean

响应是否成功 (状态码在 200-299 之间)。

res.redirected 只读

  • 类型: boolean

响应是否被重定向 (状态码在 300-399 之间)。

res.body

  • 类型: BodyInit

响应体。可以赋值为以下类型:

WARNING

不支持直接将一般对象赋值给 res.body。对于常见的 JSON 响应,应当使用下面的写法:

ts
res.headers.set('content-type', 'application/json')
res.body = JSON.stringify({
  message: 'Hello, world!'
})

类:Route

route.check(req)

  • req: Request 请求对象
  • 返回值: Record<string, string> | RegExpExecArray

检查请求是否匹配当前路由。

如果匹配,返回要附加到 req.params 上的数据;否则返回 undefined

route.dispose()

卸载路由,回收副作用。