POST 使用 Ionic 2 调用

POST calls with Ionic 2

我一直在努力使用 Ionic 2 实现对 ASP.NET API 的 POST 调用。我在有用指南的帮助下管理了 GET,但是在我看到 YouTube 视频之前,我真的找不到与 POST 类似的内容。在该视频的帮助下,我的提供商中有此方法:

 backendlogin() {
  if (this.data) {
      return Promise.resolve(this.data);
  }

  return new Promise(resolve => {
      var json = JSON.stringify({ email: 'a@hotmail.com', password: 'root' });
      var params = 'json=' + json;
      var headers = new Headers();
      headers.append('Content-Type', 'application/json');

      this.http.post('http://insertipadresshere/api/login',
          params, {
              headers: headers
          })
          .map(res => res.json())
          .subscribe(data => {
              this.data = data;
              resolve(this.data);
          },
          error => alert(error),
          () => console.log("Finished")
      );
  });
}

我的 GET 方法基本上是 Ionic 在创建提供程序时提供的方法。它们类似于此代码,除了声明变量和附加 headers 的部分,当然还有 http.get 而不是 post 。

这是我用来从页面控制器调用提供者函数的函数:

setuplogin() {
    this.backend.backendlogin()
        .then(data => {
            this.data = data;
        });
    console.log(this.data);
} 

现在进入正题。如果我了解所有内容,那么 backendLogin() 应该在出现故障时显示错误警报,它确实如此。警报显示“[object Object]”。控制台中唯一的东西是一个空日志,大概来自 setupLogin() 因为数据是空的。 api 应该有一个电子邮件地址和一个密码,return 一个 uID。谁能指出我正确的方向?

如果有错误我会拒绝承诺:

return new Promise((resolve,reject) => {
  var json = JSON.stringify({ email: 'a@hotmail.com', password: 'root'});
  var params = 'json=' + json;
  var headers = new Headers();
  headers.append('Content-Type', 'application/json');

  this.http.post('http://insertipadresshere/api/login',
      params, {
          headers: headers
      })
      .map(res => res.json())
      .subscribe(data => {
          this.data = data;
          resolve(this.data);
      },
      error => reject(error),
      () => console.log("Finished")
  );
});

也就是说,我认为没有必要创建原始承诺。您利用可观察对象的 toPromise 方法:

var json = JSON.stringify({ email: 'a@hotmail.com', password: 'root'});
var params = 'json=' + json;
var headers = new Headers();
headers.append('Content-Type', 'application/json');

return this.http.post('http://insertipadresshere/api/login',
      params, {
          headers: headers
      })
      .map(res => res.json())
      .toPromise();
);

得到错误

setuplogin() {
  this.backend.backendlogin()
    .then(data => {
        this.data = data;
        console.log(this.data);
    }, error => {
      // do something
    });
} 

最后,您可以直接使用 observable 而不是返回一个 promise:

var json = JSON.stringify({ email: 'a@hotmail.com', password: 'root'});
var params = 'json=' + json;
var headers = new Headers();
headers.append('Content-Type', 'application/json');

return this.http.post('http://insertipadresshere/api/login',
      params, {
          headers: headers
      })
      .map(res => res.json());
);

并在 setupLogin 方法中订阅它:

setuplogin() {
  this.backend.backendlogin()
    .subscribe(data => {
        this.data = data;
        console.log(this.data);
    },
setuplogin() {
  this.backend.backendlogin()
    .subscribe(data => {
        this.data = data;
        console.log(this.data);
    }, error => {
        // do something with error
    });
}