响应体序列化
响应体序列化控制如何处理 HTTP 响应的 body 数据。Keq 提供了多种序列化方式,可以根据实际需求灵活选择。
基本用法
使用 .resolveWith(type) 方法指定响应体的序列化方式:
import { request } from "keq"
const response = await request
.get("/api/cats/1")
.resolveWith("json")
console.log(response.name)序列化类型
intelligent(默认)
自动序列化模式会根据实际情况自动选择最佳的处理方式:
- 如果中间件设置了
context.output,则直接返回该值 - 否则,根据响应的
Content-Type自动选择序列化方式
| Content-Type | 解析方式 | 返回类型 |
|---|---|---|
application/json | response.json() | 对象/数组 |
multipart/form-data | response.formData() | FormData |
text/plain | response.text() | 字符串 |
| 其他 | - | undefined |
import { request } from "keq"
// 根据 Content-Type 自动处理
const cat = await request.get("/api/cats/1")
// Content-Type: application/json → 自动解析为对象
// Content-Type: text/plain → 返回字符串推荐
对于大多数场景,使用默认的 intelligent 模式即可,它能智能处理各种响应类型。
json
将响应体解析为 JSON 对象:
import { request } from "keq"
interface Cat {
id: number
name: string
breed: string
}
const cat = await request
.get("/api/cats/1")
.resolveWith("json") as Cat
console.log(`${cat.name} is a ${cat.breed}`)text
将响应体解析为纯文本字符串:
import { request } from "keq"
const description = await request
.get("/api/cats/1/description")
.resolveWith("text")
console.log(description)blob
将响应体解析为 Blob 对象,适合处理文件下载:
import { request } from "keq"
const imageBlob = await request
.get("/api/cats/1/photo")
.resolveWith("blob")
// 创建下载链接
const url = URL.createObjectURL(imageBlob)
const link = document.createElement("a")
link.href = url
link.download = "cat-photo.jpg"
link.click()
// 清理 URL
URL.revokeObjectURL(url)array-buffer
将响应体解析为 ArrayBuffer,适合处理二进制数据:
import { request } from "keq"
const buffer = await request
.get("/api/cats/1/audio")
.resolveWith("array-buffer")
// 使用 Web Audio API 播放音频
const audioContext = new AudioContext()
const audioBuffer = await audioContext.decodeAudioData(buffer)
const source = audioContext.createBufferSource()
source.buffer = audioBuffer
source.connect(audioContext.destination)
source.start()form-data
将响应体解析为 FormData 对象:
import { request } from "keq"
const formData = await request
.get("/api/cats/1/form")
.resolveWith("form-data")
console.log(formData.get("name"))
console.log(formData.get("breed"))response
返回原始的 Response 对象,可以完全控制响应的处理方式:
import { request } from "keq"
const response = await request
.get("/api/cats/1")
.resolveWith("response")
console.log(response.status)
console.log(response.headers.get("content-type"))
// 手动解析响应体
const cat = await response.json()
console.log(cat.name)