Я пытаюсь взаимодействовать с конечными точками REST API в моем приложении angular 5, используя ngrx.
Выполнить успешный запрос довольно просто, и он работает нормально. Однако, если API регистрирует ошибку в запросе и хочет отправить мое угловое приложение переднего плана обратно, я не уверен, как отобразить ошибку и сообщение для пользователя.
Вот мой эффект авторизации для входа:
@Effect()
authSignin = this.actions$
.ofType(AuthActions.TRY_SIGNIN)
.map((action: AuthActions.TrySignin) => {
return action.payload;
})
.switchMap((authData: { email: string, password: string }) => {
return this.http.post<any>(this.globals.login, authData);
})
.map((returnData: { message: string, auth: { token: string, user_name: string } }) => {
this.router.navigate(['']);
localStorage.setItem('token', returnData.auth.token);
localStorage.setItem('user_name', returnData.auth.user_name);
return {
type: AuthActions.SET_AUTH,
payload: {
token: returnData.auth.token,
user_name: returnData.auth.user_name,
authenticated: true
}
};
})
.catch((err: any) => {
console.log(err);
return {
type: AuthActions.AUTH_ERROR
};
});
В настоящее время, если вы отправите запрос с правильной информацией, вам будет возвращен токен / ваше имя пользователя, и все будет работать нормально.
Однако, если API хочет сообщить вам, что адрес электронной почты / пароль неверен, я не знаю, как зарегистрировать ошибку и сообщить об этом пользователю. Я пробовал искать в другом месте простой в использовании ресурс, но ничего из того, что я нашел, похоже, не работает.
С моим приведенным выше кодом я получаю ошибку компиляции TS:
ОШИБКА в src / app / auth / store / auth.effects.ts (44,12):
ошибка TS2345: аргумент типа '(err: any) = ›{type: string; } 'не может быть назначен параметру типа' (err: any, catch: Observable ‹{type: string; payload: {token: string; user_name: string; authen ... '.
Тип '{тип: строка; } 'не может быть назначен типу' ObservableInput ‹{}› '.
Тип '{тип: строка; } 'нельзя присвоить типу' ArrayLike ‹{}› '.
Свойство 'length' отсутствует в типе '{type: string; } '.
и в консоли после запроса:
ERROR TypeError: вы указали недопустимый объект там, где ожидался поток. Вы можете предоставить Observable, Promise, Array или Iterable.
После того, как я сделал неверный запрос, он больше не позволяет мне делать какие-либо HTTP-запросы из той же формы, мне приходится каждый раз обновлять страницу.
Надеюсь, что кто-то может помочь мне указать правильное направление. Если у вас есть вопросы / вы хотите увидеть больше моего кода, скажите, пожалуйста!