搜索
搜索
天涯的知库
显示页面
过去修订
您的足迹:
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
====== TRPC ====== :!: 搭配 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.txt
· 最后更改: 2023-04-16 10:29 由
goldentianya
回到顶部