【发布时间】:2018-05-31 20:08:27
【问题描述】:
在尝试执行 HTTP Post 请求时,我收到以下错误:
auth.service.ts?c694:156 出现问题,请求新的 密码,错误消息:您提供了流所在的“未定义” 预期的。您可以提供 Observable、Promise、Array 或 Iterable。
Http 请求之前有另一个,效果很好。
我的组件调用服务:
requestNewPassword(formInput: NgForm) {
if(formInput.controls['email'].value != '')
this.authService.getApplicationAccessToken()
.mergeMap((response: IAuthAppResponse) => this.authService.requestNewPassword(formInput, response.access_token))
.subscribe(response => {
// Content removed for simplicity
})
}
抛出错误的服务方法:
public requestNewPassword(formData: NgForm, applicationAccessToken: string): Observable<any> {
let headers = new HttpHeaders({
'Authorization':'Bearer ' + applicationAccessToken
});
let email: string = formData.controls['email'].value;
const body = {
email: email
};
console.log('requestNewPassword call header: ' + headers.get('Authorization'));
console.log('Email: ' + body.email);
return this.http.post(this.baseUrl + '/api/user/password/forgot', body, {headers}).do(response => {
console.log("New password was successfully sent to the e-mail adress");
}).catch((error: HttpErrorResponse) => {
console.log('Something went wrong requesting a new password, error message: ' + error.message);
return Observable.throw(error);
})
}
每当我在表单中输入电子邮件并提交时,这又会触发组件的 requestNewPassword 方法,我会从服务中收到上述错误。
标题和电子邮件记录正确,因此我认为我提供的数据没有任何内容。
由于我不知道如何调试它,我认为在这个令人难以置信的平台上发布这个问题是个好主意。
提前致谢!
更新
我通过不链接两个 HTTP 请求而只调用第二个请求来最小化组件中的代码以缩小问题范围,这会造成麻烦。
requestNewPassword(formInput: NgForm) {
if(formInput.controls['email'].value != '')
this.authService.requestNewPassword(formInput, "")
.subscribe(response => {
// Content removed for simplicity
})
}
我现在得到了完整的堆栈跟踪:
ERROR TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
at Object.subscribeToResult (subscribeToResult.js?c011:74)
at MergeMapSubscriber._innerSub (mergeMap.js?e2a2:132)
at MergeMapSubscriber._tryNext (mergeMap.js?e2a2:129)
at MergeMapSubscriber._next (mergeMap.js?e2a2:112)
at MergeMapSubscriber.Subscriber.next (Subscriber.js?215e:89)
at ScalarObservable._subscribe (ScalarObservable.js?d097:49)
at ScalarObservable.Observable._trySubscribe (Observable.js?4e06:172)
at ScalarObservable.Observable.subscribe (Observable.js?4e06:160)
at MergeMapOperator.call (mergeMap.js?e2a2:87)
at Observable.subscribe (Observable.js?4e06:157)
at FilterOperator.call (filter.js?35ab:60)
at Observable.subscribe (Observable.js?4e06:157)
at MapOperator.call (map.js?c4af:56)
at Observable.subscribe (Observable.js?4e06:157)
at DoOperator.call (tap.js?7fa8:63)
at Observable.subscribe (Observable.js?4e06:157)
at CatchOperator.call (catchError.js?0867:79)
at Observable.subscribe (Observable.js?4e06:157)
at PasswordResetComponent.requestNewPassword (passwordReset.component.ts?c169:43)
at Object.eval [as handleEvent] (PasswordResetComponent.html:7)
at handleEvent (core.js?223c:13255)
at callWithDebugContext (core.js?223c:14740)
at Object.debugHandleEvent [as handleEvent] (core.js?223c:14327)
at dispatchEvent (core.js?223c:9704)
at eval (core.js?223c:12028)
at SafeSubscriber.schedulerFn [as _next] (core.js?223c:4235)
at SafeSubscriber.__tryOrUnsub (Subscriber.js?215e:238)
at SafeSubscriber.next (Subscriber.js?215e:185)
at Subscriber._next (Subscriber.js?215e:125)
at Subscriber.next (Subscriber.js?215e:89)
at EventEmitter.Subject.next (Subject.js?c1c6:55)
at EventEmitter.emit (core.js?223c:4203)
at NgForm.onSubmit (forms.js?ad57:5710)
at Object.eval [as handleEvent] (PasswordResetComponent.html:7)
at handleEvent (core.js?223c:13255)
at callWithDebugContext (core.js?223c:14740)
at Object.debugHandleEvent [as handleEvent] (core.js?223c:14327)
at dispatchEvent (core.js?223c:9704)
at eval (core.js?223c:10318)
at HTMLFormElement.eval (platform-browser.js?023b:2614)
at ZoneDelegate.invokeTask (zone.js?fad3:425)
at Object.onInvokeTask (core.js?223c:4620)
at ZoneDelegate.invokeTask (zone.js?fad3:424)
at Zone.runTask (zone.js?fad3:192)
at ZoneTask.invokeTask [as invoke] (zone.js?fad3:499)
at invokeTask (zone.js?fad3:1540)
at HTMLFormElement.globalZoneAwareCallback (zone.js?fad3:1566)
由于这里提到了html,我将提供html代码:
<form class="custom_form" #requestNewPasswordForm="ngForm" (ngSubmit)="requestNewPassword(requestNewPasswordForm)">
<label>E-mail</label>
<input class="custom_input" type="email" class="inputfield form-control" ngModel name="email">
<button class="btn btn-default" type="submit">
Send
</button>
</form>
【问题讨论】:
-
在询问错误时,请始终发布错误的准确和完整的堆栈跟踪。它告诉问题出在哪里。
-
我更新了问题
-
HttpErrorResponse 的状态如何?这似乎是来自您的服务器的错误消息。
-
每当我尝试记录状态时,它只会返回 undefined
-
我不认为这是服务器错误,因为它适用于邮递员。
标签: angular http typescript rxjs