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("&");
        (...)
      });

コードに関するコメントは次のとおりです。

  • メソッドの 2 番目のパラメーターはpost、コールバックではなく、ペイロードに対応する文字列にする必要があります。あなたのヘッダーから、URL エンコードされたフォームを送信したいことがわかりました。そのため、独自に作成する必要があります。
  • HTTPのtry catch実行は非同期であり、メソッドの 2 番目のパラメーター (別のコールバック) 内でエラーを「キャッチ」できるため、 は必要ありませんsubscribe
  • 約束なんて全く必要ありません。HTTP の場合、Angular2 は内部でオブザーバブルを使用します。非同期処理も対象としています。

これをすべて修正した後、もうエラーは発生しないと思います...

お役に立てば幸いです、ティエリー

于 2016-01-28T11:56:45.493 に答える
0

上記のすべての手順を実行した後でも、スタックすることがわかりました。完全な解決策は次のとおりです。Thierry の提案に従って、try catch ブロックと promise を削除します。次のように、コンストラクター内で 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 に答える