TRPC

:!: 搭配 express 使用的时候,必须 app.use(express.json()); 否则mutation的时候 req.body 是空的。

注意要点

  1. 必须明确返回string或者int等基本类型,client端才会出现Outpu的定义。
  2. 错误类型可以这样判断:err instanceof TRPCClientError

Client side

实现中间件

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;
  }
}

it/node/trpc.txt · 最后更改: 2023-04-16 10:29 由 goldentianya
回到顶部
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0