离子http.post和映射结果到json

时间:2018-01-31 16:50:00

标签: ionic-framework ionic2

我正在尝试使用https://ionicframework.com/docs/native/http/

中所述的http.post

我进行API调用,我应该返回一些JSON,然后如果data.statussuccess,那么我在本地存储中设置一个元素,然后更改根。

我在尝试ionic serve

时遇到两个错误
  

运营商' =='不能应用于类型'数字'和'字符串'。

这与if(data.status == 'success') {

有关

并且

  

属性'令牌'类型' HTTPResponse'。

上不存在

这与this.storage.set('myToken', data.token);

有关

我的完整代码如下。似乎data似乎不是json

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { HTTP } from '@ionic-native/http';

import { FixturesPage } from '../fixtures/fixtures';
import { Storage } from '@ionic/storage';

@IonicPage()
@Component({
  selector: 'page-login',
  templateUrl: 'login.html',
})
export class LoginPage {

  email: string;
  password: string;  

  constructor(public navCtrl: NavController, public navParams: NavParams, public http: HTTP, private storage: Storage) {
  }

  loginNow() {

    this.http.post('https://api.domain.com/login', { email: this.email, password: this.password } , { headers: { 'Content-Type': 'application/json' } } ).then(data => {
        if(data.status == 'success') {
            this.storage.set('myToken', data.token);
            this.navCtrl.setRoot(FixturesPage);
        } else {
            alert("Your login details are incorrect");
        }
    }); 

  }

}

1 个答案:

答案 0 :(得分:1)

您应该将响应映射到json。为此,请导入rxjs地图运算符,然后将其添加到您的发布请求中:

loginNow() {
    this.http.post('https://api.domain.com/login', { email: this.email, password: this.password } , { headers: { 'Content-Type': 'application/json' } } ).then(data => {
      if(data.data.status == 'success') {
        this.storage.set('myToken', data.data.token);
        this.navCtrl.setRoot(FixturesPage);
      } else {
         alert("Your login details are incorrect");
      }
    }); 

}
如文档所述

编辑,您需要使用响应的data属性