angular2 http.post方法抛出typeerror {}异常

时间:2016-01-28 11:43:05

标签: oauth ionic-framework angular angular-promise ionic2

我尝试将现有的angularjs库更改为angular2以满足我的需要。下面代码中的http.post方法抛出TypeError {}作为异常。有人请帮忙,因为我被困在这上面。

login() {
  return new Promise((resolve, reject) => {
    if(typeof jsSHA !== "undefined") {
      var signatureObj = (new OauthUtility()).createSignature("POST", this.magentoOptions.baseUrl+"/oauth/initiate", this.oauthObject, {oauth_callback: "http://localhost/callback"}, this.magentoOptions.clientSecret, null);                                   
      let headersInitiate = new Headers();
      headersInitiate.append('Authorization',signatureObj.authorization_header);
      headersInitiate.append('Content-Type','application/x-www-form-urlencoded');
      let url = this.magentoOptions.baseUrl + "/oauth/initiate";
      let callback = "oauth_callback=http://localhost/callback";

      try{
        this.http.post(url, callback,{headers: headersInitiate})
         .subscribe(
          (result) => {
          console.log("i am inside");
          var rParameters = (result).split("&");
                            .....
      }
      catch(Exception){
        console.log(Exception)
      }

2 个答案:

答案 0 :(得分:1)

你应该尝试类似的东西:

var signatureObj = (new OauthUtility()).createSignature("POST", 
     this.magentoOptions.baseUrl+"/oauth/initiate", this.oauthObject,
     {oauth_callback: "http://localhost/callback"},
     this.magentoOptions.clientSecret, null);    let headersInitiate = new Headers();

headersInitiate.append('Authorization',
          signatureObj.authorization_header);
headersInitiate.append('Content-Type',
          'application/x-www-form-urlencoded');
let url = this.magentoOptions.baseUrl + "/oauth/initiate";

let payload = ' ... ';
this.http.post(url, payload,{headers: headersInitiate})
    .subscribe(
      (result) => {
        console.log("i am inside");
        var rParameters = (result).split("&");
        (...)
      });

以下是我对您的代码的评论:

  • post方法的第二个参数应该是与有效负载相对应的字符串而不是回调。我从标题中看到您要发送url编码的表单,因此您需要自己创建
  • try catch不是必需的,因为执行HTTP是异步的,并且可以捕获错误"在subscribe方法的第二个参数(另一个回调)中。
  • 你根本不需要承诺。对于HTTP,Angular2使用了底层的可观察对象。它们也针对异步处理。

在解决所有这些问题之后,我认为你不再有错误......

希望它可以帮到你, 亨利

答案 1 :(得分:0)

在进行上述所有步骤后,我发现卡住了。完整的解决方案如下。 删除try catch块并按照Thierry的建议进行保证。 在构造函数中使用http的依赖注入,如下所示,以定义http。

import {Http,HTTP_PROVIDERS,Headers} from 'angular2/http';
import {Injector} from "angular2/core";
 constructor() {

        var injector = Injector.resolveAndCreate([HTTP_PROVIDERS]);
        this.http = injector.get(Http);
}