Angular http.post не отправляет данные с подпиской - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь опубликовать данные в моем API. Post.subscribe не отправляет никаких данных, не выдается ошибка. API работает на 100%.
Вот мой код:
httpservice.ts

import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Product } from './Product';
import { Observable, of } from 'rxjs';
import { Injectable } from '@angular/core';
@Injectable({
  providedIn: 'root',
})

export class HttpService {

  baseURL = 'https://localhost:2403/testapi/';

  constructor(private http: HttpClient) {
    this.products = new Array();
  }
  products: Product[];
  post(product: Product): boolean {
    if ( !this.checkIfProductExistsAlready(product) ) {
      console.log('posting product');

      this.http.post<any>(baseURL,{"product": product.name, "price": 10, "done": false})
        .subscribe((data) => {
          console.log(data);
          product.id = data.id;
          console.log('hi');
        },
        error => console.log('uojdsigdk' + error)
      );
      console.log('posted ' + product.id);
      this.products.push(product);
      return true;
    } else {
      return false;
    }
  }

form.component.ts

addItem(): void {

    this.isError = false;
    if (!this.httpservice.post(new Product(-1, this.name, this.price, 0))) {
      this.isError = true;
    }
}

Это объявление провайдера в the app.module.ts

[...]
  providers: [HttpService],
[...]

Возможно ли, что это вызвано файлом конфигурации?

Ответы [ 3 ]

2 голосов
/ 03 марта 2020

Может быть, это происходит потому, что вы пытаетесь получить доступ к локальному веб-серверу через http s ?

baseURL = 'https://localhost:2403/testapi/';

В противном случае используйте fiddler, выполните запрос post на вашем API и посмотрите, какой сервер возвращение. :)

1 голос
/ 03 марта 2020

Я думаю, baseURL не определено в пределах вашей функции. Попробуйте this.baseURL вместо этого. Также убедитесь, что ваш локальный веб-сервер обслуживает HTTPS, как упоминалось ранее:

this.http.post<any>(baseURL, product);

становится

this.http.post<any>(this.baseURL, product);

На боковом узле пара вещей может быть неправильно с вашим кодом Observable, а также с тем, как вы внедряете свою Службу в свое приложение, как уже упоминалось в комментариях.

0 голосов
/ 03 марта 2020

добавить тип ответа

addItem(): void {    
    this.isError = false;
    if (!this.httpservice.post(new Product(-1, this.name, this.price, 0), { observe: 'response',responseType: 'text' })) {
      this.isError = true;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...