Как передать ответ на клиентс сервера?

Ниже предоставлю свой рабочий код,а именно метод login, который согласно моему заданию , разбит на трехслойную архитектуру. Mоя проблема , если candidate не найден ,то я выбрасываю ошибку. В консоли я этот ответ вижу , но на клиент ничего не приходит. Как мне вернуть эту ошибку на клиент? У меня есть "глупая" идея передать в метод поиска checkLogin обьект res. но мне кажется , есть нормальные способы решения этой проблемы.

async login(req: Request, res: Response) {
    try {
        const { email, password } = req.body;

        const token = await loginService.checkLogin(email, password);

        return res.status(200).json({ token });
    } catch (e) {
        console.error(e);
        res.status(404).json(e);
    }
}

а вот класс с методом checkLogin, в котором и происходит выброс ошибкии. как в нем вернуть ответ на клиент ?

class LoginService {
async checkLogin(email: string, password: string): Promise<string> {
    const candidate = registrationService.checkUser(email);

    if (!candidate) {
        throw new Error("Пользователь с таким email не существует!");
    }

    const comparePassword = await bcrypt.compare(String(password), String(candidate.password));

    if (!comparePassword) {
        throw new Error("Указан неверный пароль");
    }

    const token = await jwtService.generateToken(candidate.id, candidate.name, candidate.lastName, candidate.email);

    candidate.token = token;

    return token;
}

}


Ответы (2 шт):

Автор решения: Collapse

Откопал свой очень давний код, я делал примерно так:

    private async validateUser(createUserInput: CreateUserInput) {
        let userArgs: UsersArgs = new UsersArgs();
        userArgs.login = createUserInput.login;
        const user = await this.usersService.findUserByLogin(userArgs);
        console.log(user);

        if (!user)
            throw new UnauthorizedException({ message: 'Пользователь не найден' });

        const passwordEquals = await bcrypt.compare(createUserInput.password, user.password)

        if (!passwordEquals)
            throw new UnauthorizedException({ message: 'Неверный пароль' });

        return user;
    }

    async login(createUserInput: CreateUserInput) {
        const user = await this.validateUser(createUserInput);
        return this.generateToken(user);
    }

Предполагаю, что Вам просто нужно немного подредактировать выброс ошибки, Вы используете throw new Error("Указан неверный пароль");, и Ваш клиент по всей видимости просто не понимает такой формат, попробуйте использовать такой подход: throw new UnauthorizedException({ message: 'Указан неверный пароль' });, так Вы передаете на клиент json объект с ошибкой внутри, соответственно читаем примерно так: const errMsg = response.message

→ Ссылка
Автор решения: PashaFromBY

Ошибку ловлю так :

catch (error: any) {
        console.error(error);
        res.status(404).json(error.message);
}

,а создаю ошибку так :

 if (candidate) {
      throw new Error("Пост с таким названием уже существует!");
 }

При такой логике на клиент приходит ошибка.

→ Ссылка