我最近开始学习Angular(4)并遵循Angular.io的教程。
但是现在我正在尝试构建自己的应用程序,我遇到了一些问题。我花了一整天的时间试图解决这个问题,但我失败了。
我正在处理一个只有登录和退出的身份验证服务。
login
工作正常,但我无法让logout
工作。它似乎打破了toPromise()
电话。
const url = `${environment.serviceURL}/api/account/logout`;
const headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded',
'withCredentials':true,
'Authorization': `Bearer ${this.token}`});
let options = new RequestOptions({headers: headers});
let result = this.http.post(
url, options).toPromise().then(/*do something*/);
这在控制台中出现以下错误:
ERROR Error: Uncaught (in promise): TypeError: v.split is not a function
TypeError: v.split is not a function at http://localhost:4200/vendor.bundle.js:26382:76
at Array.forEach (native)
at http://localhost:4200/vendor.bundle.js:26382:20
at Map.forEach (native)
at Headers.toJSON (http://localhost:4200/vendor.bundle.js:26380:23)
at Object.stringify (<anonymous>)
at Request.Body.text (http://localhost:4200/vendor.bundle.js:26957:25)
at Request.getBody (http://localhost:4200/vendor.bundle.js:27865:29)
at Observable._subscribe (http://localhost:4200/vendor.bundle.js:27393:37)
at Observable._trySubscribe (http://localhost:4200/vendor.bundle.js:567:25)
at http://localhost:4200/vendor.bundle.js:26382:76
at Array.forEach (native)
at http://localhost:4200/vendor.bundle.js:26382:20
at Map.forEach (native)
at Headers.toJSON (http://localhost:4200/vendor.bundle.js:26380:23)
at Object.stringify (<anonymous>)
at Request.Body.text (http://localhost:4200/vendor.bundle.js:26957:25)
at Request.getBody (http://localhost:4200/vendor.bundle.js:27865:29)
at Observable._subscribe (http://localhost:4200/vendor.bundle.js:27393:37)
at Observable._trySubscribe (http://localhost:4200/vendor.bundle.js:567:25)
at resolvePromise (http://localhost:4200/polyfills.bundle.js:3224:31)
at http://localhost:4200/polyfills.bundle.js:3150:17
at SafeSubscriber._error (http://localhost:4200/vendor.bundle.js:66387:85)
at SafeSubscriber.__tryOrSetError (http://localhost:4200/vendor.bundle.js:16367:16)
at SafeSubscriber.error (http://localhost:4200/vendor.bundle.js:16321:26)
at Subscriber._error (http://localhost:4200/vendor.bundle.js:16248:26)
at Subscriber.error (http://localhost:4200/vendor.bundle.js:16222:18)
at Observable._trySubscribe (http://localhost:4200/vendor.bundle.js:572:18)
at Observable.subscribe (http://localhost:4200/vendor.bundle.js:555:27)
at http://localhost:4200/vendor.bundle.js:66387:15
市长差异(至少我认为)login
返回包含用户信息的数据,而logout
不会返回任何数据。它只是删除了服务中的会话。
我只是想知道请求是否成功,所以我可以采取行动。 我做错了什么或者我应该采取哪些不同的措施来实现这个目标?
答案 0 :(得分:1)
这与toPromise()
无关,正如@Bunyamin Coskuner和@BeetleJuice在评论中指出的那样。
我发现在调用没有body参数的http.post
方法时我犯了一个错误,这导致函数将options
作为正文。
变化:
let result = this.http.post(
url, options).toPromise().then(/*do something*/);
为:
let result = this.http.post(
url, null, options).toPromise().then(/*do something*/);
解决了我的错误!