【问题标题】:HTTP plugin is not installed error with ionic离子的HTTP插件未安装错误
【发布时间】:2018-02-13 07:27:27
【问题描述】:
$ ionic cordova plugin add cordova-plugin-http
$ npm install --save @ionic-native/http

实现是:

  constructor(private https: HTTP ) {
  }

  this.https.get('http://ionic.io', {}, {})
  .then(data => {
   this.httpData =data;
   console.log(data.status);
   })
   .catch(error => {

     console.log(error.status);

     });

我得到这个错误:

[20:49:03] console.warn: Native: 尝试调用 HTTP.get,但未安装 HTTP 插件。 [20:49:03] console.warn:安装 HTTP 插件:'ionic plugin add cordova-plugin-http'

【问题讨论】:

  • 你能告诉我为什么你需要使用这个插件而不是 angular http
  • @Sampath 无法谈论 OP,但我正在尝试摆脱 CORS 错误 ionicframework.com/docs/faq/…

标签: cordova-plugins ionic3


【解决方案1】:

您必须从 ngoninit 中删除代码并将其添加到 ionviewdidenter

ionViewDidEnter(){
//your code here
}

【讨论】:

    【解决方案2】:

    ionic的master分支已经修复pluginRef: 'cordova.plugin.http', 问题,

    如果问题仍然存在,或者您不想更改源文件,请尝试这些步骤,它对我有用。

    1. 删除现有版本

      rm -rf node_modules/ platforms/ plugins/ www/
      
    2. 将 ionic native 更新到最新版本:

      npm i --save ionic-native@latest
      

      (请检查其他插件依赖项,如果有问题,请尝试通过虚拟环境设置隔离包 - https://github.com/ekalinin/nodeenv):

    3. 添加所有需要的插件和 http 插件 ::

      ionic cordova plugin add cordova-plugin-advanced-http
      
    4. 最后你需要的插件和 http 插件

      npm install @ionic-native/http
      

    现在您构建的 iOS 或 android 应该会检测到所有插件

    【讨论】:

      【解决方案3】:

      你有没有试过在平台准备好后调用插件然后检查平台?

      async checkVersion() {
          const ready = !!await this.platform.ready();
          if (ready && this.platform.is('cordova')) {
              // try to add your code here
          }
      }
      

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题。我通过声明 Angular 的 HTTP 模块就设法摆脱了这个错误。 在 app/app.modules.ts

        import { HttpClientModule } from '@angular/common/http';
        
        @NgModule({
          imports: [
            // import HttpClientModule after BrowserModule.
            HttpClientModule,
          ],
        })
        

        即使我不使用 Angular 的模块,这也解决了我的问题。

        【讨论】:

          【解决方案5】:

          Ionic 原生插件取决于设备功能。因此,由于 http、联系人或相机等插件无法在您的浏览器上运行。这种错误的一个例子是

          Native: tried calling HTTP.post, but Cordova is not available. Make sure to include cordova.js or run in a device/simulator
          

          所以尝试在这里获取 ionic 的应用程序来开发应用程序https://play.google.com/store/apps/details?id=io.ionic.devapp

          【讨论】:

            【解决方案6】:

            如果您是从 PC 运行应用程序,您可能会收到此类错误。 尝试使用 ionicdev

            【讨论】:

            • 这个答案有点薄。您能否说为什么您认为“使用 ...”会有所帮助,以及您为什么认为这会解决问题中概述的问题?
            • 您不能在浏览器中使用 cordova 原生插件。连http都不行
            • 评论不是这个答案的一部分。我建议您扩展此答案以使其对每个人 更有用,而不仅仅是要求您扩展它的人。
            【解决方案7】:

            Ionic3 Cordova SSL 固定示例

            https://github.com/sijovijayan/SSL-pinning-with-ionic-cordova-example

            在此示例中,您将了解如何实现 SSL Pinning 以及如何生成 .cer 文件

            【讨论】:

              【解决方案8】:

              这可能是由以下三个问题中的任何一个引起的:

              1. 插件未安装;
              2. 您在浏览器(或其他受限环境)上运行代码;或
              3. 平台尚未准备好(您在加载插件之前调用了代码)。

              【讨论】:

              • 不,这些不是问题。一些离子对象没有为插件创建,所以它不起作用。如果我直接使用 cordova.exec() t=它工作正常。
              【解决方案9】:

              我会切换到 Angular 的 HTTP 而不是 Cordova HTTP。优点:不需要任何插件。

              package.json:

                 "dependencies": {
                      ...
                      "@angular/http": "4.1.3",
                      ...
                 }
              

              app.module.ts:

              import { Http, HttpModule } from '@angular/http';
              
              ...
              
              @NgModule({
                declarations: [
                  MyApp,
                ],
                imports: [
                  ...
                  HttpModule,
                  ...
                ]...
              

              调用 .ts-class:

              import { Http } from '@angular/http';
              
              ...
              
              constructor(... , public http: Http, ...) {
                  //Example: .get for a JSON and map it:
                  this.http.get(url).map(res => res.json()).subscribe(data => {
                      this.data = data;
                  });
              }
              

              对第一条评论的回答:

              由于您似乎需要 SSL Pinning,而我还没有在 Angular HTTP 中找到简单的方法,所以我发现您添加 cordova 插件的命令与文档中的命令略有不同:

              你写道:

              ionic cordova plugin add cordova-plugin-http
              

              现在命令似乎是:

              ionic cordova plugin add cordova-plugin-advanced-http
              

              (https://ionicframework.com/docs/native/http/)

              如您所见,它通过 enableSSLPinning(enable) 等方法支持您的需求。

              【讨论】:

              • 我需要支持 SSL pinning,因为我觉得使用 angular HTTP 我们不能支持 SSL pinning。如果有什么方法可以支持使用 Angular http 进行 ssl 固定,请告诉我。
              • 我刚刚回复了您的请求。
              【解决方案10】:

              如果您不想像@alpere 建议的那样修改 ionic-native 插件,或者如果解决方案不起作用,您可以随时使用不带 ionic-native 的 cordova 插件。为此,请通过在导入下方的某处添加以下内容来告诉 typescript http 句柄存在:

              declare var http;
              

              然后像这样使用它:

              http.get(
                'https://ionic.io/',
                {},
                {},
                response => {
                  console.log(response.status);
                },
                response => {
                  console.error(response.error);
                },
              );
              

              请注意,不需要this,因为cordova 插件是在全局范围内定义的。在没有 ionic-native 包装器的情况下使用插件的缺点是您会丢失漂亮的类型注释、承诺回调,并且在某些情况下您必须自己触发角度变化检测。

              【讨论】:

                【解决方案11】:

                尝试按照错误消息中的建议运行以下命令以安装HTTP plugin

                ionic plugin add cordova-plugin-http
                

                【讨论】:

                  【解决方案12】:

                  Ionic Native HTTP 更改了他们正在使用的 cordova 插件,因为旧的插件已经有一段时间没有更新了。在更改期间,对插件的引用尚未更新,因此已损坏。 (见:https://github.com/silkimen/cordova-plugin-advanced-http/issues/8

                  您可以通过将引用的旧插件更改为新插件来修复它: (提交后更新插件也会解决问题)

                  @ionic-native/plugins/http/index.ts:

                  改变:

                  pluginRef: 'cordovaHTTP',
                  

                  到:

                  pluginRef: 'cordova.plugin.http',
                  

                  查看提交: https://github.com/ionic-team/ionic-native/commit/49ee0d85a304770a9a3bd3e04eb9609e6d565b67

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2018-10-09
                    • 1970-01-01
                    • 2016-07-29
                    • 2020-02-08
                    • 2018-03-02
                    • 1970-01-01
                    • 2018-04-05
                    • 2020-02-06
                    相关资源
                    最近更新 更多