Angular6 Post Method Неверный вывод - PullRequest
0 голосов
/ 31 августа 2018

Я использую Post Method для моего входа в Angular 6, я всегда получал сообщение Failed to Login, когда даже давал правильные учетные данные для входа в систему, и когда я отлаживал свой код, я обнаружил, что отправляющие заголовки равны нулю, даже если я включил свои заголовки.

Это мой код, когда я отлаживаюсь, и его отображающий ответ не определен:

case 'json':default:return res$.pipe(map(function (res) { return res.body; }));

My Ts File

import { Injectable } from '@angular/core';
import { RequestOptions, Headers, Response } from '@angular/http';
import { map } from 'rxjs/operators';
import { HttpClient, HttpHeaders } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class AuthService {

  baseUrl = "http://localhost:3000/api/auth";
  userToken: any;
  httpOptions = {
    headers: new HttpHeaders({
      'Content-Type': 'application/json'
    })
  };

  constructor(private http: HttpClient) {}

  login(loginData: any) {
    return this.http.post(this.baseUrl, loginData, this.httpOptions)
    .pipe(
      map((response: Response) => {
        const user = response.json();
        if (user) {
          localStorage.setItem('token', user.token);
          this.userToken = user.token;
        }
      })
    )
  }

}

Заранее спасибо

1 Ответ

0 голосов
/ 31 августа 2018

HttpClient делает для вас response.json(), поэтому он возвращает только тело ответа. Также вам, вероятно, не нужно устанавливать какие-либо параметры заголовка, это должно быть application / json по умолчанию.

login(loginData: any) {
  return this.http.post(this.baseUrl, loginData);

}

должно быть достаточно. Это вернет заметку, на которую вы можете подписаться.

Итак, в вашем компоненте вы можете сделать:

this.authService.login(data).subscribe((user) => {
if (user) {
 localStorage.setItem('token', user.token);
}
else {
// What to do when there is no token
// Ideally you would want to throw an error on the server along the     
// lines of code 403. 
} 
});

Если вы возвращаете код состояния, например, 403, вам нужно отловить ошибку, например, так: https://www.learnrxjs.io/operators/error_handling/catch.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...