3

我尝试根据需要将现有的 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)
      }
4

2 回答 2

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 在底层使用 observables。它们也针对异步处理。

在修复所有这些之后,我认为你不会再有错误了......

希望它可以帮助你,蒂埃里

于 2016-01-28T11:56:45.493 回答
0

即使在执行上述所有步骤后,我也发现卡住了。完整的解决方案如下。按照 Thierry 的建议删除 try catch 块和承诺。在构造函数中使用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);
}
于 2016-02-01T04:46:39.673 回答