无法设置属性' baseUrl'未定义的

时间:2017-02-07 18:25:34

标签: javascript angularjs typescript nswag

我已经从ASP .NET Rest API使用NSWAG生成了一个javascript客户端。但是当我尝试调用API方法时,我发现了一些错误。

原因错误是:TypeError:无法设置属性' baseUrl'未定义的。

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;

我正在做的角度代码:

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

我已经调试了应用程序,它进入了AuthClient函数,我也尝试将其更改为此,但问题仍然存在:

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

我也收到了这个错误:Uncaught ReferenceError: exports is not defined我不知道它是否与它有关。如果不是只是忽略。

错误追踪:

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)

2 个答案:

答案 0 :(得分:1)

AuthClient函数中,您需要实际返回构造函数,然后使用new调用它:

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

    return AuthClient;
}());

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

您可以省略exports行。

答案 1 :(得分:0)

此行不是必需的:

this.baseUrl = undefined;

如果你再次拥有这个:

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

最好的办法是:

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

AuthClient中你有两个参数,其中第二个参数是baseUrl。但是当你设置它时,你只使用一个参数。

然后在其中定义另一个函数,然后使用参数。