服务器 (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()
卸载路由,回收副作用。