当前位置: 首页 > 知识库问答 >
问题:

角服务不工作与http.get观察

张博涛
2023-03-14

我正在尝试使用http.get从服务器检索json文件,并从组件订阅可观察的内容。但是,它返回的是一个错误,而不是数据。

你能告诉我哪里出了问题吗:

import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { Observable } from 'rxjs';

@Injectable()
export class MoviesService {

  constructor(private http: Http) {
  }

  getMovies() : Observable<any> {
    let url = API_URL;
    return this.http.get(url);
  }
}

下面是组件:

import { Component } from '@angular/core';
import { MoviesService } from './movies.service';

@Component({
  selector: 'movies',
  templateUrl: './movies.component.html',
  styleUrls: ['./movies.component.css'],
  providers: [
    MoviesService
  ]
})

export class MoviesComponent {

  constructor(private moviesService: MoviesService) {};

  ngOnInit() {
    this.moviesService.getMovies().subscribe(
      (data: any) => {
        console.log("Success " + data);
      },
      (err) => {
        console.log("Error: " + JSON.stringify(err));
      }
    );
  }
}

我正在使用Angular和rxjs库的最新版本。

请帮忙。

共有2个答案

葛景龙
2023-03-14

在我的例子中,我的app.module.ts文件的imports部分既有HttpClientTestingModule,也有HttpClientModule。

从app.module.ts中删除HttpClientTestingModule修复了我的问题。

角度: 11.0.9

艾谦
2023-03-14

使用HttpClient而不是HttpHttp返回类型为Response的对象。您必须对其调用json()方法,该方法将为您提供所需的数据。

要避免这样做,请使用HttpClient。要使用HttpClient,您必须首先将HttpClientMoules添加到模块的导入数组中。

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable()
export class MoviesService {

  constructor(private http: HttpClient) {
  }

  getMovies() : Observable<any> {
    let url = API_URL;
    return this.http.get(url);
  }
}

您的API不安全。这就是客户端阻止它并给出混合内容错误的原因。当一些内容通过HTTPS提供,而一些内容通过HTTP提供时,通常会发生这种情况。我真的不认为有办法在不改变应用编程接口的情况下解决这个问题。

你应该考虑使用一个安全的API来制作电影。

可以使用OMDb API。这是一个安全和免费的API来获取电影细节。您必须先创建一个API Key。你可以在这里做。

 类似资料:
  • 我有一个实现CanActivate的AuthGuard(用于路由)。 我的问题是,CanActivate结果依赖于超文本传输协议-get结果-登录服务返回一个可观察的。 我如何将它们结合在一起-使CanActivate依赖于后端状态? 编辑:请注意,这个问题是从2016年开始的-已经使用了角度/路由器的一个非常早期的阶段。

  • 问题内容: 我已经看到angular.factory()和angular.service()都用于声明服务;但是,我在官方文档中找不到 任何地方。 两种方法有什么区别? 应该使用哪个(假设他们做不同的事情)? 问题答案: 直到我以这种方式对自己说: 服务 :您编写的 函数 将是 新的 -ed: Factory* :将 调用 您编写的 函数 (构造函数): * 您可以根据自己的意愿进行操作,但是有一

  • 我正在为youtube api实现OAuth 2… 公共静态凭据authorize(列表范围,字符串credentialDatastore)引发IOException { } 它在本地工作。从逻辑上讲,我将回调URL更改为http://localhost:8081/CallBack..在本地工作正常,但当我使用公共IP部署到AWS服务器时,它不起作用。 显示地址已被用于8081异常,甚至没有重定向

  • 我试图将zookeeper和kafka设置为共享名称空间中单独的Kubernetes部署/吊舱。我已经在我的Ubuntu沙盒上通过kubeadm用Calico引导了一个本地K8s 1.8... 所以我假设我的集群中有一个普通的网络问题,然后我注意到一些更让我困惑的事情...如果我将zookeeper.connect设置为10.107.41.148:2181(zookeeper服务的当前地址),连接

  • 问题内容: 我正在开发angularjs应用程序作为我的angularjs学习的一部分。我有控制器,从那里我叫服务层。 }); 我注意到由于$ http.get.then东西的异步特性,不会立即检索数据,因此当我从控制器(teamsController)调用getTeams()时,我不会得到“ teams”,我会得到没有。 知道我该如何解决吗? 第二次尝试: 在阅读了有关以下文章所建议的关于角度的

  • 问题内容: 我是一个有角的新手,正在构建一个应用程序,让我感到困惑的是,有几种方法定义了服务,我从此链接中了解了更多:如何定义服务, 然后似乎没有太大的区别定义服务的方式。 但我只是注意到我认为是不同的一个不同之处: 看到我从这里得到的这项服务http://jsfiddle.net/2by3X/5/ 如果我使用如下所示的“工厂”定义此服务,则一个功能不能调用该服务的其他功能。 我将在浏览器控制台中