Angular 6 Невозможно получить данные из API внешнего сервера через прокси - PullRequest
0 голосов
/ 12 октября 2018

Я использую локальное угловое приложение, и у меня проблема с получением данных из API на внешний сервер.Я попытался использовать прокси, поэтому я создаю файл proxyconfig.json , и я включил его в командную строку через

ng serve --proxy-config proxyconfig.json

А вот содержимое:

{
    "/api/*": {
    "target": "https://bittrex.com/api/v1.1/public/",
        "secure": false,
        "pathRewrite": {
            "^/api": ""
        },
        "changeOrigin": true
    }
}

Мне нужно передать переменные, поэтому я создал сервис OrderBookService :

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { OrderBook } from './order-book.model';


@Injectable({
    providedIn: 'root',
  })
export class OrderBookService {
    constructor(private httpClient: HttpClient) {

    }
    getOrderBookBittrex(currency1: string, currency2: string): Observable<OrderBook[]> {
        const url = `http://localhost:4200/api/getorderbook?market=${currency1}-${currency2}&type=both`;
        return this.httpClient.get<OrderBook[]>(url);
    }
}

Проблема в том, что когда я хочу получить эти данные и сохранить их в переменной в своем компоненте, путь не переводится должным образом: он отправляет запрос на http://localhost:4200/api/getorderbook?market=BTC-LTC&type=both вместо https://bittrex.com/api/v1.1/public/getorderbook?market=BTC-LTC&type=both:

  private getTransfers(): void {
    const currency1 = 'BTC';
    const currency2 = 'LTC';
    this.orderBookService.getOrderBookBittrex(currency1, currency2)
      .subscribe(orders => {
        this.orderBook = orders;
      });
  }

This is console log

Кто-нибудь знает, как это сделать правильно?

Работает нормально, когда я помещаю весь путь к proxconfig.json так:

{
    "/api/*": {
        "target": "https://bittrex.com/api/v1.1/public/getorderbook?market=BTC-LTC&type=both",
        "secure": false,
        "pathRewrite": {
            "^/api": ""
        },
        "changeOrigin": true
    }
}

Но мне нужно передать переменные.

1 Ответ

0 голосов
/ 12 октября 2018

Вы код

getOrderBookBittrex(currency1: string, currency2: string): Observable<OrderBook[]> {
    const url = `http://localhost:4200/api/getorderbook?market=${currency1}-${currency2}&type=both`;
    return this.httpClient.get<OrderBook[]>(url);
}

Просто измените URL как

getOrderBookBittrex(currency1: string, currency2: string): Observable<OrderBook[]> {
    const url = `/api/getorderbook?market=${currency1}-${currency2}&type=both`;
    return this.httpClient.get<OrderBook[]>(url);
}

Вам не нужно использовать http://localhost:4200 в вашем коде.

И"pathRewrite": { "^/api": "" }, тоже не нужно

...