Wie erkenne ich den ursprünglichen Fehler im NestJS-Microservices-Framework?JavaScript

Javascript-Forum
Guest
 Wie erkenne ich den ursprünglichen Fehler im NestJS-Microservices-Framework?

Post by Guest »

Ich verwende das NestJS-Microservices-Paket ClientProxy mit RabbitMQ als Transporter. Ich versuche, eine Nachricht vom Authentifizierungsdienst an den Benutzerdienst zu senden. Der Authentifizierungsdienst fragt den Benutzerdienst, ob ein Benutzer vorhanden ist. Ist dies nicht der Fall, fordert er den Benutzerdienst auf, einen Benutzer zu erstellen. Mein Code funktioniert, aber ich habe Schwierigkeiten, den Fehler zu extrahieren, der im Benutzer-Repository ausgegeben wird, wenn bereits ein Benutzer vorhanden ist. Ich erhalte in der Antwort einen 500-Fehler und obwohl das funktioniert, verstehe ich nicht, wo ich meinen ursprünglichen Fehler verliere. Ich muss mir einige Muster ausdenken, da dies eine normale Sache sein wird. Ich hatte wenig Erfolg bei der Durchsicht der NestJS-Dokumentation. Ihre Beispiele deklarieren keine Rückgabetypen für die Funktionen, daher konnte ich keine vollständigen Arbeitsbeispiele sehen. Die einzige Möglichkeit, einige der Typescript-Fehler bei der Rückgabe des Werts einer Funktion, die ein Observable aufruft, zu beheben, bestand darin, die Antwort in ein Versprechen zu verpacken. Scheint allerdings ein Hack zu sein.
Jede Hilfe wäre dankbar. Vielen Dank im Voraus.
Auth-Microservice-Dienst sendet Ereignis an Benutzer-Microservice:
Es wird zunächst gefragt, ob die E-Mail-Adresse des Benutzers vorhanden ist und wirft einen Fehler. Ich schaffe es nicht, dass dieser Fehler in der Antwort auftaucht.

Code: Select all

public async register({
dto,
}: {
dto: UserRequestDto;
}): Promise {
return new Promise((resolve, reject) => {
this.usersController
.send(FIND_USER_BY_EMAIL, dto.email)
.pipe(
switchMap((res) => {
if (res === null) {
return this.usersController.send(CREATE_USER, dto);
}
}),
)
.subscribe({
next: (res) => {
resolve(res);
},
error: (e) => {
reject(e);
},
});
});
}
Benutzercontroller wartet auf Ereignis:

Code: Select all

@MessagePattern(FIND_USER_BY_EMAIL)
@Serialize(UserResponseDto)
public async findByEmail(@Payload() email: string): Promise {
try {
return await this.usersService.findByEmail({ email: email });
} catch (e) {
throw e;
}
}
Vom Controller aufgerufene Benutzerdienstmethode:

Code: Select all

public async findByEmail({ email }: { email: string }): Promise {
try {
return await this.usersRepository.findByEmail({ email: email });
} catch (e) {
throw e;
}
}
Vom Dienst aufgerufenes Benutzer-Repository:
Hier gebe ich den Fehler aus. Dieser Fehler ist in der resultierenden Observable nicht zu sehen, wo all dies beginnt. Die Fehlermethode im Observable weiß, dass ein Fehler aufgetreten ist, gibt mir aber ein leeres Objekt {}

Code: Select all

public async findByEmail({ email }: { email: string }): Promise {
const repository = this.getRepository(UserEntity);

try {
const user = await repository.findOneBy({ email: email });

if (user) {
throw new UnprocessableEntityException("Email already exists.");
}

return user;
} catch (e) {
throw e;
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post