首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在tRPC中正确使用上下文?

如何在tRPC中正确使用上下文?
EN

Stack Overflow用户
提问于 2022-09-10 21:58:10
回答 1查看 72关注 0票数 0

假设我有一个非常基本的API,它有两个端点集。一组查询和更改有关用户的属性(这需要用户名参数),另一组查询和变异有关Post的属性,后者需要post ID。(为了简单起见,让我们忽略身份验证。)我目前还没有找到一种很好的方法来实现这一点。

对我来说,最有意义的是为每一组路线建立一个单独的上下文,如下所示:

代码语言:javascript
复制
// post.ts
export async function createContext(
    opts?: trpcExpress.CreateExpressContextOptions
) {
    // pass through post id, throw if not present
}
type Context = trpc.inferAsyncReturnType<typeof createContext>;

const router = trpc
    .router()
    .query("get", {
        resolve(req) {
            // get post from database
            return post;
        },
    });

// similar thing in user.ts

// server.ts
const trpcRouter = trpc
    .router()
    .merge("post.", postRouter)
    .merge("user.", userRouter);

app.use(
    "/trpc",
    trpcExpress.createExpressMiddleware({
        router: trpcRouter,
        createContext,
    })
);

这是对上下文的抱怨,我在tRPC文档中找不到在合并时将单独的上下文传递给每个路由器的任何内容。中间件似乎也解决不了这个问题--虽然我可以在中间件中获取post/user并传递它,但我看不到在中间件中需要某种类型的输入的任何方法。我将不得不在每个查询/突变上添加{ input: z.string() }{ input: z.number() },这当然不是理想的。

对于这个(大概是常见的)用例,文档和示例似乎非常缺乏,那么这里最好的方法是什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-11 22:20:10

此功能已添加到(编写时未发布) v10中。https://trpc.io/docs/v10/procedures#multiple-input-parsers

代码语言:javascript
复制
const roomProcedure = t.procedure.input(
  z.object({
    roomId: z.string(),
  }),
);
 
const appRouter = t.router({
  sendMessage: roomProcedure
    .input(
      z.object({
        text: z.string(),
      }),
    )
    .mutation(({ input }) => {
      // input: { roomId: string; text: string }
    }),
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73675427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档