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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2020-06-20 使用imageproxy+minio处理图片缩放
2018-06-20 memsql filesystem pipeline 试用
2018-06-20 memsql 多节点部署
2016-06-20 前端优化:DNS预解析提升页面速度
2014-06-20 DD_belatedPNG解决IE6下PNG不透明问题