2017-02-07 1 views
1

Ich habe einen Javascript-Client mit NSWAG von einer ASP .NET Rest API generiert. Aber ich finde ein paar Fehler, wenn ich versuche, eine API-Methode aufzurufen.Kann die Eigenschaft 'baseUrl' von undefined nicht setzen

Der Fehler in Cause ist: TypeError: Eigenschaft 'BaseUrl' von undefined kann nicht festgelegt werden.

var AuthClient = (function() { 
    function AuthClient($http, baseUrl) { 
     this.baseUrl = undefined; 
     this.http = null; 
     this.jsonParseReviver = undefined; 
     this.http = $http; 
     this.baseUrl = baseUrl !== undefined ? baseUrl : ""; 
    }; 
    AuthClient.prototype.login = function (auth) { 
     var _this = this; 
     var url_ = this.baseUrl + "/api/v1/auth/login"; 
     var content_ = JSON.stringify(auth ? auth.toJS() : null); 
     return this.http({ 
      url: url_, 
      method: "POST", 
      data: content_, 
      transformResponse: [], 
      headers: { 
       "Content-Type": "application/json; charset=UTF-8", 
       "Accept": "application/json; charset=UTF-8" 
      } 
     }).then(function (response) { 
      return _this.processLogin(response); 
     }, function (response) { 
      if (response.status) 
       return _this.processLogin(response); 
      throw response; 
     }); 
    }; 
...}()); 
exports.AuthClient = AuthClient; 

In meinem Winkel Code, den ich tue:

var client = AuthClient('http://localhost:14959/'); 
    var call = client.prototype.login(data); 

Ich habe bereits die Anwendung gedebuggt und es tritt in der Funktion AuthClient und ich habe auch versucht, es so zu ändern, aber das Problem weiterhin besteht:

function AuthClient($http, baseUrl) { 
    this.baseUrl = baseUrl; 
}; 

ich erhalte auch diesen Fehler: Uncaught ReferenceError: exports is not defined ich weiß nicht, ob es etwas mit ihm zu tun oder nicht. Wenn nicht einfach ignorieren.

Fehler-Trace:

TypeError: Cannot set property 'baseUrl' of undefined 
    at AuthClient (RenterLogApiBackendClient.js:19) 
    at b.$scope.login (HomeController.js:16) 
    at fn (eval at compile (angular.min.js:1), <anonymous>:4:206) 
    at b (angular.js:16123) 
    at e (angular.js:26490) 
    at b.$eval (angular.js:17913) 
    at b.$apply (angular.js:18013) 
    at HTMLFormElement.<anonymous> (angular.js:26495) 
    at HTMLFormElement.dispatch (jquery-3.1.1.min.js:3) 
    at HTMLFormElement.q.handle (jquery-3.1.1.min.js:3) 

Antwort

1

In Ihrer AuthClient Funktion, müssen Sie tatsächlich Ihren Konstruktor zurückkehren, und dann new mit rufen:

var AuthClient = (function() { 
    // ... 

    return AuthClient; 
}()); 

var client = new AuthClient('http://localhost:14959/'); 

Sie wahrscheinlich die exports Linie weglassen.

0

Diese Linie ist nicht erforderlich:

this.baseUrl = undefined; 

Wenn Sie wieder dieses:

this.baseUrl = baseUrl !== undefined ? baseUrl : ""; 

Der beste Weg, dies zu tun ist:

this.baseUrl = '' || this.baseUrl; 

Und in haben Sie zwei Parameter, von denen der zweite Parameter baseUrl ist. Aber wenn Sie es einstellen, verwenden Sie nur einen Parameter.

Also definieren Sie eine andere Funktion innerhalb und verwenden Sie dann den Parameter.

+0

Wie gesagt, habe ich nur folgendes versucht: function AuthClient ($ http, baseUrl) { this.baseUrl = baseUrl; }; und bekam den gleichen Fehler –

+0

Der Vorschlag ist rückwärts; sollte 'this.baseUrl = baseUrl || sein ""; ". – mc10

+0

@ RuiQueirós Ja, das ist, weil Sie zwei Parameter in 'AuthClient' haben. Definieren Sie stattdessen eine andere Methode innerhalb 'AuthClient' mit' baseUrl' als Parameter. AN und rufen Sie diese Methode für den 'Post' Aufruf –

Verwandte Themen