服务器 (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 只读
- 类型:
Headers
请求头。
req.params 只读
- 类型:
Record<string, string> | RegExpExecArray
路由匹配结果。如果路由是字符串,则是一个包含所有路由参数的对象;如果是正则表达式,则是一个 RegExpExecArray
。仅在路由中间件中有效。
req.body 只读
- 类型:
ReadableStream
请求体可读流。
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
- 类型:
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()
卸载路由,回收副作用。