Angular 6 не получает ответ от сервера узла expressjs - PullRequest
0 голосов
/ 24 августа 2018

помогите новичку, я создаю приложение стека MEAN и столкнулся с проблемой, когда не могу прочитать ответ с экспресс-сервера, но ответ генерируется, когда я использую почтальон, вот мой код

auth.service.ts

import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';
import { map } from 'rxjs/operators';

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

authToken: any;
user: any;
constructor(private http:Http) { }

registerUser(user){
  let headers = new Headers();
  headers.append('Content-Type','application/json');
  return this.http.post('http://localhost:3000/users/register',user, 
{headers: headers})
.pipe(map(res => res.json));
}

authenticateUser(user){
  let headers = new Headers();
  headers.append('Content-Type','application/json');
  return this.http.post('http://localhost:3000/users/authenticate',user, 
  {headers: headers})
    .pipe(map(res => res.json));
 }
}

login.component.ts

import { Component, OnInit } from '@angular/core';
import { AuthService } from '../../services/auth.service';
import { Router } from '@angular/router';
import { FlashMessagesService } from 'angular2-flash-messages';

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.css']
})
export class LoginComponent implements OnInit {

  username: String;
  password: String;
  constructor(private authService: AuthService,
   private router: Router,
   private flashMessage: FlashMessagesService
  ) { }

  ngOnInit() {
  }

  onLoginSubmit(){
  const user = {
  username: this.username,
  password: this.password
  }
  this.authService.authenticateUser(user).subscribe(data => {
    console.log(data);
   });
  }
  }

Chrome Console

ƒ () {                                         login.component.ts:29
    if (typeof this._body === 'string') {
        return JSON.parse(this._body);
    }
    if (this._body instanceof ArrayBuffer) {
        return JSON.parse(this.text());

Ниже приведен ответ в Почтальоне:

raw data...application/json login data and server response

Ответы [ 2 ]

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

Ошибка в вашей функции pipe.

pipe(map( res => res.json ))

Вам нужно позвонить res.json() внутри вашей карты. Преобразовать его в

pipe(map( res => res.json() ))

Однако в Angular v5 преобразование ответа в JSON не требуется.


Правильный код, как показано ниже: -

 authenticateUser(user){
  let headers = new Headers();
  headers.append('Content-Type','application/json');
  return this.http.post('http://localhost:3000/users/authenticate',user, 
  {headers: headers})
    .pipe(map(res => res.json()));
 }
0 голосов
/ 24 августа 2018

Похоже, data от authenticateUser - это функция.Вы пытались это назвать?

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