快速上手
安装
如果在 NodeJS 中运行,NodeJS 版本必须大于 18。
- npm
- pnpm
- yarn
发送请求
通过request构造请求,然后调用.then()(或.end()) 发送。下面发送一个简单的 GET 请求:
import { request } from "keq"
const cat = await request
.get("/cat")
console.log(`我可爱的 ${cat.name} 今年 ${cat.age} 岁啦。`)响应体会根据响应头的Content-Type自动序列化,这省去了我们许多麻烦。
如果调用.get(url)的url地址仅包含请求路径(pathname)。那么在浏览器中会默认使用 window.location.origin作为 Http 请求域名;在 NodeJS 中则是 http://127.0.0.1.
构造 DELETE, HEAD, PATCH, POST, PUT 请求只需要调用request不同的方法:
import { request } from "keq"
await request.delete("https://example.com/cat")
await request.del("https://example.com/cat") // .del() 是 .delete() 的别名
await request.head("https://example.com/cat")
await request.patch("https://example.com/cat")
await request.post("https://example.com/cat")
await request.put("https://example.com/cat")设置 Headers/Query
调用 .set()/.query() 即可设置 Headers/Query:
import { request } from "keq"
await request
.get("https://example.com/cat")
// 设置 Headers
.set("X-Origin-Host", "https://example.com")
.set({ Accept: "application/json" })
.set(new Headers({ 'cache-control': 'no-cache' }))
// 添加 Query
.query('breed', 'british_shorthair')
.query({ order: 'desc' })路由参数
Keq 提供了便捷的填充接口路由参数的方法:
import { request } from "keq"
await request
.get("/users/:userName/books/{bookName}")
.params("userName", "jack")
.params("bookName", "kafka")
// 也可使用对象做为参数
.params({
userName: "jack",
bookName: "kafka",
})请求体
JSON
通常,我们使用下面的代码发送携带请求体的 POST 请求:
import { request } from "keq"
await request
.post("/cat")
.send({
name: "sweet",
age: 8,
})调用.send() 并且参数是 object 时,会自动的将 Content-Type 设置为 application/json。
FormData
import { request } from "keq"
await request
.post("/cat")
.field("name", "sweet")
.field("age", 8)
.attach("avatar", new Blob(/* image */))调用.field()/.attach() 时,会自动的将 Content-Type 设置为 multipart/form-data。
你也可以直接使用FormData:
import { request } from "keq"
const form = new FormData()
form.append("name", "sweet")
form.append("age", 8)
await request
.post("/cat")
.send(form)当调用.send() 的参数是 FormData 时,会自动的将 Content-Type 设置为 multipart/form-data。
x-www-form-urlencoded Request
要发送 application/x-www-form-urlencoded 格式的请求体, 你必须调用 .type("form") 来确保设置正确的 Content-Type:
import { request } from "keq"
await request
.post("/cat")
.type("form")
.send({ name: "sweet" })
.send("age=8").type() 显式设置的 Content-Type 优先级高于 .send()/.filed()/.attach()隐式推导的 Content-Type。与调用先后顺序无关。