zoukankan      html  css  js  c++  java
  • trpc 基于typescript的api 开放框架

    trpc 是一个类型安全的api 开发框架,可以利用typescript 强大的类型能力,同时也能实现数据处理的复用,以下是一个参考案例

    参考demo

    • server 端代码
      package.json
     
    {
      "dependencies": {
        "@trpc/client": "^7.3.3",
        "@trpc/next": "^7.3.3",
        "@trpc/react": "^7.3.3",
        "@trpc/server": "^7.3.3",
        "express": "^4.17.1",
        "node-fetch": "^2.6.1"
      },
      "devDependencies": {
        "@types/express": "^4.17.12",
        "@types/node": "^15.12.4",
        "@types/node-fetch": "^2.5.10"
      },
      "name": "trpc-app",
      "version": "1.0.0",
      "main": "index.js",
      "license": "MIT"
    }

    app.ts

    // server/index.ts
    import * as trpc from '@trpc/server';
     
    const appRouter = trpc.router().query('getUser', {
      input: (val: unknown) => {
        if (typeof val === 'string') return val;
        throw new Error(`Invalid input: ${typeof val}`);
      },
      async resolve(req) {
        req.input; // string
        return { id: req.input, name: 'Bilbo' };
      },
    });
     
    export default appRouter;
    export type AppRouter = typeof appRouter;

    express 集成

    import * as trpcExpress from '@trpc/server/adapters/express';
    import * as trpc from '@trpc/server';
     
    import appRouter from "./app"
     
    import express from "express"
     
    const app = express();
     
    // created for each request
    const createContext = ({
      req,
      res,
    }: trpcExpress.CreateExpressContextOptions) => ({}) // no context
    type Context = trpc.inferAsyncReturnType<typeof createContext>;
     
    app.use(
      '/trpc',
      trpcExpress.createExpressMiddleware({
        router: appRouter,
        createContext: () => null, // no context
      })
    );
     
    app.listen(4000);
    • client 代码
    import type { AppRouter } from './app';
    import { createTRPCClient } from '@trpc/client';
    import fetch from "node-fetch"
    // 此处比较重要
    global.fetch = fetch as any;
    const client = createTRPCClient<AppRouter>({
      url: 'http://localhost:4000/trpc',
    });
     
     
    (async()=>{
        const bilbo = await client.query('getUser', 'id_bilbo');
        console.log(bilbo)
    })()

    说明

    trpc 是一个很不错的基于typescript 开发api 的框架,而且目前已经提供了比较完备的框架支持(react,next,express)

    参考资料

    https://trpc.io/
    https://github.com/trpc/trpc

  • 相关阅读:
    使用 libevent 和 libev 提高网络应用性能
    在PHP中PDO解决中文乱码问题的一些补充
    apache重写规则详解
    Apache的配置
    正则表达式30分钟入门教程
    LVS+keepalived搭建负载均衡
    php判断终端是手机还是电脑访问网站代码
    nginx 502 bad gateway
    算法复习-深度优先遍历和回溯法的关系
    分支限界法和回溯法对比
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/14909121.html
Copyright © 2011-2022 走看看