当前位置: 首页 > news >正文

trpc快速上手

tRPC (Type-safe Remote Procedure Call) 是一个用于构建类型安全的 API 的框架,它能够在前端和后端之间共享类型,确保类型安全性。这对于使用 TypeScript 的项目特别有用,因为它消除了前后端类型不一致的问题,提高了开发效率和代码质量。

trpc也可以集成到 Express, Fastify,Next中。Example Apps | tRPC

server/index.ts

import { createHTTPServer } from '@trpc/server/adapters/standalone';
import { appRouter } from './router';
import cors from 'cors';const server = createHTTPServer({middleware: cors(),router: appRouter,
});server.listen(3000, () => {console.log("server running on 127.0.0.1:3000");
});

server/router.ts

import { initTRPC } from '@trpc/server';
import { z } from 'zod';
const t = initTRPC.create();export const router = t.router;
export const publicProcedure = t.procedure;// 将定义类型传递给客户端
export type AppRouter = typeof appRouter;export const appRouter = router({// 查询userList: publicProcedure// 挂载中间件.use(async (opts) => {console.log('middleware1!');return opts.next();}).use(async (opts) => {console.log('middleware2!');return opts.next();})// 定义响应数据类型.output(z.array(z.object({id: z.number(),name: z.string(),age: z.number(),})),).query(async () => {return [{ id: 1, name: "Tom", age: 21 }];}),// 参数查询userById: publicProcedure// 定义接收参数类型.input(z.string()).query(async (opts) => {const { input } = opts;console.log("userById receive params:", input);return 'ok';}),// 修改userCreate: publicProcedure.input(z.object({ name: z.string() })).mutation(async (opts) => {const { input } = opts;console.log("userCreate receive params:", input);return 'update';}),
});

client.ts

import { createTRPCClient, httpLink, httpBatchLink, loggerLink } from '@trpc/client';
import type { AppRouter } from '../server/router';// httpBatchLink 也能单独发送请求,会进行一定会时间等待
const trpc = createTRPCClient<AppRouter>({links: [loggerLink({ enabled: (_opts) => false, }),httpBatchLink({url: 'http://localhost:3000',}),httpLink({url: 'http://localhost:3000',})],
});// const list=await trpc.userList.query();
// console.log(list);// 发送条件查询
const user = await trpc.userById.query('1');
console.log(user);// 发送修改请求
const createdUser = await trpc.userCreate.mutate({ name: 'sachinraja' });
console.log(createdUser);// const user2 = await trpc.userById.query(123);
// console.log(user2);// const createdUser2 = await trpc.userCreate.mutate({ name:"123", age: 21 });
// console.log(createdUser2);

http://www.lryc.cn/news/372113.html

相关文章:

  • 知识图谱存在的挑战---隐私、安全和伦理相关和测试认证相关
  • 课时155:脚本发布_简单脚本_命令罗列
  • 借助ollama实现AI绘画提示词自由,操作简单只需一个节点!
  • PyTorch -- Visdom 快速实践
  • 基于xilinx FPGA的QSFP调试使用经验
  • WPF 使用Image控件显示图片
  • 合肥工业大学内容安全实验一:爬虫|爬新闻文本
  • 自动驾驶---Perception之视觉点云雷达点云
  • maven 显式依赖包包含隐式依赖包,引起依赖包冲突
  • Spring应用如何打印access日志和out日志(用于分析请求总共在服务耗费多长时间)
  • SpringBoot整合SpringDataRedis
  • 电脑怎么录制游戏视频?轻松捕捉每一帧精彩
  • 【Elasticsearch】索引快照并还原到其他集群
  • QT--DAY1
  • DSP教学实验箱_数字图像处理_操作教程:5-1 图像旋转
  • MyBatis总结(2)- MyBatis实现原理(三)
  • 【保姆级教程】Linux 基于 Docker 部署 MySQL 和 Nacos 并配置两者连接
  • Dev C++ 安装及使用方法教程-干活多超详细
  • 无缝滚动的swiper
  • tvm实战踩坑
  • 计算机网络之网络层知识总结
  • 利用穿戴甲虚拟试戴技术提高销量和参与度
  • 后端|压缩Base64图片的两种方式
  • HCIP认证笔记(单选题)
  • 数据结构笔记-2、线性表
  • Linux基础IO【II】真的很详细
  • 【C++】模板及模板的特化
  • 2001-2023年上市公司数字化转型测算数据(含原始数据+处理代码+计算结果)
  • ICRA 2024:基于视觉触觉传感器的物体表⾯分类的Sim2Real双层适应⽅法
  • 代理模式(设计模式)