Nano Hash - криптовалюты, майнинг, программирование

Пользовательский сервис Angular 4/5 HttpClient

Я новичок в Angular, но я бы сделал очень простую вещь (и я не могу это сделать)... Я хочу создать «базовую службу», которая взаимодействует с моим бэкэндом API, но прежде чем устанавливать некоторые вещи (заголовки , переменная... и так далее)... все остальные службы должны вызывать эту "базовую службу" для связи с API... вот мой код:

import { Injectable } from '@angular/core';
import { HttpClient, HttpRequest, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs/Rx';
import { responseModel } from '../models/response.model';

@Injectable()
export  class  BaseService {

    public headers: HttpHeaders;

    constructor(private _http: HttpClient) {  
        this.headers = new HttpHeaders();
        this.headers.append('Accept', 'application/json, */*');
        this.headers.append('Content-Type', 'application/json;charset=UTF-8');
    }

    private callBackEnd(relativeEndPoint: string,reqMethod: string,
        reqParams?: HttpParams, objBody?: any): Observable<responseModel> {

        const reqUrl = 'https://mypath/' + relativeEndPoint;
        return this._http.request<responseModel>(reqMethod, reqUrl,
            {
                body: objBody,
                headers: this.headers,
                params: reqParams,
                responseType: 'json',
                withCredentials: true
            }
        );
    }

    handleError(error: any): Observable<responseModel> {
        const out: responseModel= {
            error: !error.ok,
            code: "10",
            message: "no connection",
            more_info: "info@cr",
            response: {}
        }

        return Observable.create(observer => {
            observer.next(out);
            observer.complete();
        });
    }
}

это очень просто... каждый сервис, в котором есть DI "BaseService", может вызывать

/*IMPORT EVERYTHING*/

@Injectable()
export class CustomService {

  constructor(private _http: BaseService) {

  }

  examplefunction(): Observable<responseModel> 
  {
      return this._http.callBackEnd( '/user/', 'GET')
      .map(
          response => {
               console.log( JSON.stringify(response));
          return response;
          }
          )
   }

}

Я создаю простой компонент

import { Component, OnInit } from '@angular/core';
import { CustomService } from './CustomService.service';
import { responseBE } from '../global/models/response.model';

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

  constructor(private _service: CustomService ) { }

  ngOnInit() {

    this._service.examplefunction()
      .map(res => {
        console.log(res);
      });
  }

}

но ничего не работает :(

Есть идеи?


  • у вас есть ошибка JS? 23.11.2017
  • ничего... вроде бы все идеально, но запрос на получение вроде бы не делается 23.11.2017
  • странно, потому что ваш callBackEnd в BaseService является приватным. Итак, в CustomService вы не можете получить к нему доступ 23.11.2017
  • Как сказал @mickaelw, вам нужно удалить модификатор private из вашего метода callBackEnd. 23.11.2017
  • Кроме того, вам нужно где-то предоставить свой BaseService. Вероятно, в вашем app.module. Итак, вы можете сделать что-то вроде этого: import { BaseService } from './base.service'; bootstrap (приложение, [baseService]); 23.11.2017
  • Вам нужно подписаться на наблюдаемое, чтобы что-то произошло. Вы нигде этого не делаете. 23.11.2017

Ответы:


1

Я думаю, что вам не хватает подписки, поскольку для выполнения Observable требуется подписка.

this._service.examplefunction()
  .subscribe(res => {
    console.log(res);
  });
23.11.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..