首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从HttpClient获取json文件?

如何从HttpClient获取json文件?
EN

Stack Overflow用户
提问于 2018-08-28 11:42:07
回答 1查看 29.2K关注 0票数 0

我试图从json中获取一个HttpClient文件,但是当我添加.subscribe时会出错

进口:

代码语言:javascript
运行
复制
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders, HttpClientModule } from '@angular/common/http';
import { HttpModule, Request, Response, Headers, Http } from '@angular/http';
import { Observable } from 'rxjs';

我的代码:

当我添加.subscribe (在图像中标记为黄色)时,我得到了以下错误。什么意思?

对象{ _body:错误,状态: 0,ok: false,statusText:"",headers: Object,type: 3,url: null }

EN

Stack Overflow用户

回答已采纳

发布于 2018-08-28 12:12:56

如果您想要非常清楚和有组织的东西,您应该创建一个角度的服务,并从您的组件调用服务。

例如,就像这样:

Service.ts:

代码语言:javascript
运行
复制
import { Injectable } from "@angular/core";
import { Observable, throwError } from "rxjs";
import {
  HttpClient,
  HttpHeaders,
  HttpErrorResponse
} from "@angular/common/http";
import { catchError, map } from "rxjs/operators";

// Set the http options
const httpOptions = {
  headers: new HttpHeaders({ "Content-Type": "application/json", "Authorization": "c31z" })
};

@Injectable({
  providedIn: "root"

/**
 * Service to call all the API
 */
export class ApiService {
  constructor(private http: HttpClient) {}

  /**
   * Function to handle error when the server return an error
   *
   * @param error
   */
  private handleError(error: HttpErrorResponse) {
    if (error.error instanceof ErrorEvent) {
      // A client-side or network error occurred. Handle it accordingly.
      console.error("An error occurred:", error.error.message);
    } else {
      // The backend returned an unsuccessful response code. The response body may contain clues as to what went wrong,
      console.error(
        `Backend returned code ${error.status}, ` + `body was: ${error.error}`
      );
    }
    // return an observable with a user-facing error message
    return throwError(error);
  }

  /**
   * Function to extract the data when the server return some
   *
   * @param res
   */
  private extractData(res: Response) {
    let body = res;
    return body || {};
  }

  /**
   * Function to GET what you want
   *
   * @param url
   */
  public getListOfGroup(url: string): Observable<any> {

    // Call the http GET
    return this.http.get(url, httpOptions).pipe(
      map(this.extractData),
      catchError(this.handleError)
    );
}

}

Component.ts:

代码语言:javascript
运行
复制
import { Component, OnInit } from "@angular/core";
import { ApiService } from "../../services/api.service";

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

  url = "/url/path/to/your/server";

  constructor(private api: ApiService) {}

  ngOnInit() {
    this.api
      .getListOfGroup(url)
      .subscribe(
        data => {
          console.log(data);
        },
        err => {
          console.log(err);
        }
      );
  }

}

我的建议是遵循开始的角度,如果不是,你会很快迷路。服务教程角

票数 9
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52056992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档