@dudousxd/nestjs-客户端
框架中立运行时间 @dudousxd/nestjs-codegen 输出:装有可插件的打字取取器和可选的超级json变压器. 没有依诺蒂亚依赖.
代码由 @dudousxd/nestjs-codegen (单位:千美元)api.ts进口 Fetcher 类型 从此软件包运行到 a Fetcher 实例 createApi(fetcher)。此软件包提供取取器:它拥有 URL 大楼、信头、出错映射(ApiHttpError),以及有效载荷变压器,而实际的网络调用则通过可插接的运输(原载: fetch (默认情况下).
因为生成的客户端在运行时调用它,这是一个 普通依赖 - 不是一个 devDependency编辑 Fetcher 界面是完全通用的 (get<T>(path, opts?): Promise<T>),而打入的表面是让生成的客户端和查询选项推断响应类型。 失踪或 any- 类型取取器无声地将整个生成的客户端降为 any。 。 。 .
安装
pnpm add @dudousxd/nestjs-client
使用量
创建取取器,然后交给 createApi 由您的生成导出 api.ts数字 :
import { createFetcher } from '@dudousxd/nestjs-client';
import { createApi } from './api'; // generated by @dudousxd/nestjs-codegen
const fetcher = createFetcher({
baseUrl: '/api',
headers: () => ({ authorization: `Bearer ${getToken()}` }),
});
const api = createApi(fetcher);
默认运输是本地的 fetch编辑 headers 函数被调用为每个请求一次,所以动态认证符号总是保持当前状态.
带上你自己的轴箱
过 axiosTransport(http) 用自己的拦截器、认证器和 withCredentials数字 :
import axios from 'axios';
import { createFetcher, axiosTransport } from '@dudousxd/nestjs-client';
const http = axios.create({ baseURL: '/api', withCredentials: true });
const fetcher = createFetcher({ transport: axiosTransport(http) });
在轴实例上设置基准 URL( 不)
createFetcher是因为baseUrl所以它不是前缀两次.
全球信头
setGlobalHeaders 登记适用于所有获取器的每个请求的函数——方便用于全应用程序认证或跟踪信头:
import { setGlobalHeaders } from '@dudousxd/nestjs-client';
setGlobalHeaders(() => ({ authorization: `Bearer ${getToken()}` }));
超级json和变压器管道
A 类 变压器 是一个 { stringify, parse } 双人 将超级json传递给富豪型(Date, (中文(简体) ), Map, (中文(简体) ), Set, (中文(简体) ), BigInt)——服务器必须使用同一种变压器:
import superjson from 'superjson';
import { createFetcher } from '@dudousxd/nestjs-client';
const fetcher = createFetcher({ transformer: superjson });
通过数组来编程管道 composeTransformers: 基准值 qqstring 序列器, 然后字符串 qqstring 包装器( 压缩、 加密) 应用到左到右 stringify 右出左出击 parse数字 :
import superjson from 'superjson';
import { createFetcher } from '@dudousxd/nestjs-client';
import { compress } from './my-compress'; // { stringify, parse } over strings
const fetcher = createFetcher({ transformer: [superjson, compress] });
错误
非-2xx 答复以 ApiHttpError 携带 status, (中文(简体) ), statusText并解析 body附加时 isUnauthorized 编号 : isForbidden 编号 : isNotFound 编号 : isClient 编号 : isServer 帮助者 :
import { ApiHttpError } from '@dudousxd/nestjs-client';
try {
await api.users.get({ params: { id } });
} catch (err) {
if (err instanceof ApiHttpError && err.isNotFound) {
// handle 404
}
}
获取者合同
生成的客户端依赖于此输入的表面—— 保存 T 通用响应类型 :
interface Fetcher {
get<T>(path: string, opts?: RequestOpts): Promise<T>;
post<T>(path: string, opts?: RequestOpts): Promise<T>;
put<T>(path: string, opts?: RequestOpts): Promise<T>;
patch<T>(path: string, opts?: RequestOpts): Promise<T>;
delete<T>(path: string, opts?: RequestOpts): Promise<T>;
}
createFetcher 返回此精确形状的值。 符合下列条件的任何对象: Fetcher 界面工作- 这就是为什么框架与自己的客户端可以提供兼容性 createFetcher (见下文).
如何与 @dudouxd/nestjs-codegen 相匹配
@dudousxd/nestjs-codegen 是编码元的一半, 它运行于 dev/ CI 中, 并释放出一个完全键入 api.ts 从你的NestJS控制器。 生成的文件导入到 Fetcher 类型 从这个软件包 并曝光一个 createApi(fetcher) 工厂.
@dudousxd/nestjs-client 是运行时间的一半——生成的客户端实际执行的依赖。 安装在应用程序中,用 createFetcher,并传递给 createApi。 。 。 .
运送客户的框架(例如: @dudousxd/nestjs-inertia-client) 暴露一个相容性 createFetcher 生成一个 Fetcher- 形状对象,所以同一生成的客户端在它们上方运行不变.
文档
许可证
麻省理工学院