差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
it:node:trpc [2023-04-14 20:08] – 创建 goldentianyait:node:trpc [2023-04-16 10:29] (当前版本) – [TRPC] goldentianya
行 2: 行 2:
  
 :!: 搭配 express 使用的时候,必须 <color #ff7f27>''%%app.use(express.json())%%''</color>; 否则mutation的时候 req.body 是空的。 :!: 搭配 express 使用的时候,必须 <color #ff7f27>''%%app.use(express.json())%%''</color>; 否则mutation的时候 req.body 是空的。
 +
 +
 +===== 注意要点 =====
 +
 +  - 必须明确返回string或者int等基本类型,client端才会出现Outpu的定义。
 +  - 错误类型可以这样判断:<color #ff7f27>''%%err instanceof TRPCClientError%%''</color>
 +===== Client side =====
 +实现中间件
 +<code javascript>
 +import { Injectable } from '@angular/core';
 +import { TRPCClient, TRPCRequest, TRPCResponse } from '@trpc/client';
 +
 +@Injectable({ providedIn: 'root' })
 +export class TRPCClientService {
 +  private clientApp: TRPCClient<TRouter>; // TRouter ist der Typ Ihres TRPC-Routers
 +
 +  constructor() {
 +    // Erstellen der TRPC-Client-Instanz
 +    this.clientApp = createTRPCProxyClient<TRouter>({
 +      links: [
 +        // Fügen Sie Ihren HTTP-Link hinzu
 +        // Hier können Sie den HTTP-Interceptoren-Ketten hinzufügen
 +        // um den Bearer-Token zu überprüfen und zu aktualisieren
 +        (request: TRPCRequest, next: (req: TRPCRequest) => Promise<TRPCResponse>) => {
 +          // Überprüfen, ob der Bearer-Token abgelaufen ist
 +          const isTokenExpired = this.isTokenExpired();
 +
 +          // Wenn der Token abgelaufen ist, aktualisieren Sie ihn
 +          if (isTokenExpired) {
 +            // Führen Sie den Aktualisierungsprozess für den Bearer-Token durch
 +            // z. B. durch einen API-Aufruf, um einen neuen Token zu erhalten
 +            // und aktualisieren Sie den Authorization-Header im request-Objekt
 +            // mit dem neuen Token
 +            const newToken = this.refreshToken(); // Beispiel für einen Funktion, um den Token zu aktualisieren
 +            request.headers.Authorization = `Bearer ${newToken}`;
 +          }
 +
 +          // Weitergeben der Anfrage an den nächsten Interceptor oder an den HTTP-Link
 +          return next(request);
 +        },
 +        // Fügen Sie Ihren HTTP-Link hinzu
 +        httpBatchLink({
 +          url: 'http://localhost:3003/api',
 +          headers: {
 +            Authorization: `Bearer xxxxxxxxYYYYY`,
 +          },
 +        }),
 +      ],
 +    });
 +  }
 +
 +  // Methode, um zu überprüfen, ob der Bearer-Token abgelaufen ist
 +  private isTokenExpired(): boolean {
 +    // Implementieren Sie hier Ihre Logik zur Überprüfung des Ablaufdatums des Tokens
 +    // und geben Sie true zurück, wenn der Token abgelaufen ist, andernfalls false
 +    // Beispiel: Vergleich des aktuellen Datums mit dem Ablaufdatum des Tokens
 +    const tokenExpirationDate = new Date(localStorage.getItem('tokenExpirationDate'));
 +    const currentDate = new Date();
 +    return currentDate > tokenExpirationDate;
 +  }
 +
 +  // Methode, um den Bearer-Token zu aktualisieren
 +  private refreshToken(): string {
 +    // Implementieren Sie hier Ihren Prozess zur Aktualisierung des Bearer-Tokens
 +    // und geben Sie den neuen Token zurück
 +    // Beispiel: Aufruf eines API-Endpunkts, um einen neuen Token zu erhalten
 +    const newToken = 'newTokenValue'; // Beispiel für einen neuen Token
 +    localStorage.setItem('accessToken', newToken); // Aktualisieren Sie den Token in Ihrem Speicher
 +    return newToken;
 +  }
 +
 +  // Getter für die TRPC-Client-Instanz
 +  get client(): TRPCClient<TRouter> {
 +    return this.clientApp;
 +  }
 +}
 +
 +</code>
it/node/trpc.1681502920.txt.gz · 最后更改: 2023-04-14 20:08 由 goldentianya
回到顶部
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0