typescript trpc -调用自身内部的路由

2ledvvac  于 2023-03-04  发布在  TypeScript
关注(0)|答案(1)|浏览(134)

根据here文档,您可以使用const caller = route.createCaller({})函数在服务器端调用另一个路由。但是,如果路由在其自身内,是否可以使用this关键字来实现?如果不能,如何调用路由兄弟?

import { z } from "zod";

import { router, publicProcedure } from "../trpc";

export const exampleRouter = router({
  hi: publicProcedure.query(async () => {
    return "Hi there!";
  }),
  world: publicProcedure.query(async () => {
    return "World";
  }),
  hello: publicProcedure.query(async function () {
    const caller = this.createCaller({});
    const result = await caller.example.hi();
  }),
});
d6kp6zgx

d6kp6zgx1#

虽然我不知道您所问问题的确切答案,但根据您为服务器端调用提供的链接,createCaller * 不应 * 用于从另一个过程中调用另一个过程。
文档提到这将产生开销,因为即使客户端只进行了一次API调用,也可能需要为每个过程调用再次创建上下文。
因此,与示例代码不同的是:

import { procedure, router } from '../trpc'

export const myRouter = router({
    hi: procudure.query(() => 'hi'),
    hello: procedure.query(() => {
        const caller = createCaller({})
        return caller.myRouter.hi()
    })
})

你 * 应该 * 做这样的事情:

import { procedure, router } from '../trpc'

const getHi = () => {
    return 'hi'
}

export const myRouter = router({
    hi: procudure.query(() => getHi()),
    hello: procedure.query(() => getHi())
})

在该示例中,用于获取所需信息的逻辑(在本例中仅为'hi',但也可能是数据库调用)被抽象化,以便在每种情况下仍调用相同的代码,但没有额外的过程调用。

相关问题