目录
TRPC
搭配 express 使用的时候,必须
app.use(express.json())
; 否则mutation的时候 req.body 是空的。
注意要点
- 必须明确返回string或者int等基本类型,client端才会出现Outpu的定义。
- 错误类型可以这样判断:
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; } }