差别
这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
it:node:trpc [2023-04-14 20:08] – 创建 goldentianya | it:node:trpc [2023-04-16 10:29] (当前版本) – [TRPC] goldentianya | ||
---|---|---|---|
行 2: | 行 2: | ||
:!: 搭配 express 使用的时候,必须 <color # | :!: 搭配 express 使用的时候,必须 <color # | ||
+ | |||
+ | |||
+ | ===== 注意要点 ===== | ||
+ | |||
+ | - 必须明确返回string或者int等基本类型,client端才会出现Outpu的定义。 | ||
+ | - 错误类型可以这样判断:< | ||
+ | ===== Client side ===== | ||
+ | 实现中间件 | ||
+ | <code javascript> | ||
+ | import { Injectable } from ' | ||
+ | import { TRPCClient, TRPCRequest, | ||
+ | |||
+ | @Injectable({ providedIn: ' | ||
+ | export class TRPCClientService { | ||
+ | private clientApp: TRPCClient< | ||
+ | |||
+ | constructor() { | ||
+ | // Erstellen der TRPC-Client-Instanz | ||
+ | this.clientApp = createTRPCProxyClient< | ||
+ | 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, | ||
+ | // Überprüfen, | ||
+ | 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(); | ||
+ | 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: ' | ||
+ | headers: { | ||
+ | Authorization: | ||
+ | }, | ||
+ | }), | ||
+ | ], | ||
+ | }); | ||
+ | } | ||
+ | |||
+ | // Methode, um zu überprüfen, | ||
+ | private isTokenExpired(): | ||
+ | // 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(' | ||
+ | const currentDate = new Date(); | ||
+ | return currentDate > tokenExpirationDate; | ||
+ | } | ||
+ | |||
+ | // Methode, um den Bearer-Token zu aktualisieren | ||
+ | private refreshToken(): | ||
+ | // Implementieren Sie hier Ihren Prozess zur Aktualisierung des Bearer-Tokens | ||
+ | // und geben Sie den neuen Token zurück | ||
+ | // Beispiel: Aufruf eines API-Endpunkts, | ||
+ | const newToken = ' | ||
+ | localStorage.setItem(' | ||
+ | return newToken; | ||
+ | } | ||
+ | |||
+ | // Getter für die TRPC-Client-Instanz | ||
+ | get client(): TRPCClient< | ||
+ | return this.clientApp; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ |