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);

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值