TypeError: Sie bereitgestellt, 'undefined', wobei ein stream zu erwarten war
Ich habe eine Ionische Anwendung, die eine user
Anbieter mit einem signup()
Methode:
doSignup() {
//set login to same as email
this.account.login = this.account.email;
//Attempt to login in through our User service
this.user.signup(this.account).subscribe((resp) => {
this.navCtrl.push(MainPage);
}, (err) => {
//console.log('error in signup', err);
//^^ results in 'You provided 'undefined' where a stream was expected'
//this.navCtrl.push(MainPage);
//Unable to sign up
let toast = this.toastCtrl.create({
message: this.signupErrorString,
duration: 3000,
position: 'top'
});
toast.present();
});
}
Aus irgendeinem Grund, dieser code ruft nie den Erfolg-Rückruf, wird nur der Fehler-handler. Wenn Sie es tut, wird es die Ergebnisse in der Fehlermeldung, die Sie sehen in den Kommentar oben.
Meine user.signup()
Methode sieht wie folgt aus:
signup(accountInfo: any) {
return this.api.post('register', accountInfo).share();
}
Meine Api
- Klasse sieht wie folgt aus:
import { HttpClient, HttpParams } from '@angular/common/http';
import { Injectable } from '@angular/core';
/**
* Api is a generic REST Api handler. Set your API url first.
*/
@Injectable()
export class Api {
public static API_URL: string = 'http://localhost:8080/api';
constructor(public http: HttpClient) {
}
get(endpoint: string, params?: any, reqOpts?: any) {
if (!reqOpts) {
reqOpts = {
params: new HttpParams()
};
}
//Support easy query params for GET requests
if (params) {
reqOpts.params = new HttpParams();
for (let k in params) {
reqOpts.params.set(k, params[k]);
}
}
return this.http.get(Api.API_URL + '/' + endpoint, reqOpts);
}
post(endpoint: string, body: any, reqOpts?: any) {
return this.http.post(Api.API_URL + '/' + endpoint, body, reqOpts);
}
put(endpoint: string, body: any, reqOpts?: any) {
return this.http.put(Api.API_URL + '/' + endpoint, body, reqOpts);
}
delete(endpoint: string, reqOpts?: any) {
return this.http.delete(Api.API_URL + '/' + endpoint, reqOpts);
}
patch(endpoint: string, body: any, reqOpts?: any) {
return this.http.put(Api.API_URL + '/' + endpoint, body, reqOpts);
}
}
Ich habe versucht, das entfernen share()
aus user.signup()
Rückkehr Observable<any>
, aber das hilft nicht.
Wo sind Sie, rufen Sie doSignup() ? Vielleicht ist 'dieses' ist nicht verfügbar in diesem Kontext.
Es heißt von
Es heißt von
<form (submit)="doSignup()">
in meinem signup.html: github.com/oktadeveloper/ionic-jhipster-starter/blob/master/src/.... eine Anmeldung.ts ist hier: github.com/oktadeveloper/ionic-jhipster-starter/blob/master/src/...
InformationsquelleAutor Matt Raible | 2017-12-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stand ich vor diesem Problem beim erstellen eines neuen Projekts mit generator-jhipster-Ionischen (yo jhipster-Ionischen geben, v3.1.2), folgende Matt Raible's (OP) Die Verwendung Ionischer für JHipster zu Erstellen Mobile Apps mit OIDC Authentifizierung blog-Artikel, aber die Wahl des JWT-Authentifizierung anstelle der OIDC.
Den Ursprung des Problems war eine Mischung von Problemen.
Hatte ich das Problem beim Betrieb eines Ionic-app mit den livereload-server, die CORS Probleme passiert und Eckig HTTP Rücksendung der klassischen
HTTP failure response for (unknown url): 0 Unknown Error
an, wobei 0 für die HTTP-Fehler-code.Aber in dem aktuellen Fall wurde das Problem versteckt, indem Sie schlechte Fehlerbehandlung auf der Beobachtbaren Ebene.
Wenn Sie Folgen Winkel - HttpClient #Error Details Abschnitt Hinweise, und fügen Sie eine Beobachtbare Rohr mit einem catchError Betreiber auf die HTTP-POST-Aufrufs können Sie get die richtigen HTTP-Fehler-details. In diesem Fall, anstatt sich auf die
rxjs/util/subscribeToResult.js:71
(TS-Quelle #L80)TypeError: You provided 'undefined' where a stream was expected
Standard-Fehler-Fall, es geht umrx/util/subscribeToResult.js:23
(TS-Quelle #L34), und der Fehler korrekt behandelt in der Pipe-Methode.Nachdem die Beobachtbaren nennt, habe ich festgestellt, dass die aktuelle Standard-Authentifizierung Abfangjäger, wie gesehen, in dieser Vorlage src/Anbieter/auth/auth-interceptor.ts fängt HTTP-Fehler 401 und tut nichts für die anderen, im Grunde muting-Sie und verhindert Ihre Vermehrung.
TL;DR In der JWT Fall, die Lösung ist einfach, entfernen Sie die
src/providers/auth/auth-interceptor.ts
.catch(...)
block, so dass Fehlerfortpflanzung zulogin.service.ts
, und in seinerthis.authServerProvider.login(credentials).subscribe((data) => { ... }, (err) => { ... })
Fehler-callback.Ich glaube, das Problem und die Lösung könnte sein, das gleiche für Ihre OIDC Falle, Ihre signup-Methode und die Fehler-callback.
[Bearbeiten] Noch mehr, da die gleichen
.catch
- code finden Sie in der starter-Beispiel oben im ersten post Kommentare: ionic-jhipster-starter - auth-interceptor.ts#L31Ich bin froh zu hören, es hat geholfen! Auf einer seitlichen Anmerkung, ich verstehe nicht, warum Sie verwenden
.share()
im aktuellen Fall... Es sollte vor allem verwendet werden, wenn Sie brauchen echte asynchrone Verhalten, die übertragung von Eigentum aus dem Abonnement Anrufer mit der Datenquelle, in der Erwartung, mehrere Ereignisse zu geschehen, von entlang seiner Lebensdauer, und um die automatische ref gezählt "cleanup" und " Source (Quelle) re-Konstruktion, bei der die Abonnenten nach allen bisherigen Abonnenten verlassen haben. Mit einer HTTP-Aufruf wie hier, ich verstehe Sie nicht den HTTP-Aufruf nicht blockiert, aber asynchrone mag übertrieben...Ich verstehe, möchten Sie vielleicht mehrere gleichzeitige Abonnenten und response-caching mit replay (wie in Was ist der richtige Weg, um die Ergebnis einer Winkel-Http-Netz anrufen im RxJs 5?), aber ich bin mir gerade nicht sicher über die aktuelle Anwendungsfälle (starter-Projekt und jhipster-Ionische generator). Vielleicht nette features sind zu erwarten/nachgewiesen in einer zukünftigen version?
danke, obwohl mein problem ein anderes war, aber das entfernen catch-block aus der interceptor mir erlaubt, erreichen Sie den tatsächlichen Fehler.
In meinem Fall war ich einfach nicht zurückgeben zu beobachten bei allen.. (~_~) ...ich hatte das beobachtbare Rückkehr auskommentiert ( - _ - ) in meinem getStuff () - Methode.
InformationsquelleAutor Stéphane Seyvoz
In meinem Fall war ich seiner Rückkehr mit leeren zurück:
Zu beheben, kam ich am beobachteten Objekt:
InformationsquelleAutor FindOutIslamNow
Habe ich das Gesicht dieses Problem und in meinem Fall
responseType
wohl zutext
(weil der entworfenen API-Endpunkt) anstatt Standard -json
.import { HttpClient } from '@angular/common/http';
Bevor:
Nach festen:
Ich denke, diese Fehlermeldung ist zu allgemein und es wäre schön, wenn es für Entwickler mehr Details/hilfreiche Fehlermeldung. Danke.
signup(accountInfo: any) { return this.api.post('register', accountInfo, { responseType: 'text' as 'text' }).share(); }
InformationsquelleAutor Sid Morad
Gelöst hier der richtige Weg 🙂
Habe ich schon vor diesem Problem, wenn Sie versuchen, einen Benutzer zu authentifizieren mithilfe von JSON Web Token. in meinem Fall ist es im Zusammenhang mit der Authentifizierung interceptor.
Senden einer Anfrage zur Authentifizierung einer Benutzer nicht haben, um ein token, da es noch nicht existiert.
Überprüfen Sie, dass Ihre Abfangjäger gehören:
Und Sie bieten
{'No-Auth':'True'}
zu Ihrem header der Anfrage wie dieser:InformationsquelleAutor Badis Merabet
In meinem Fall den Fehler verursacht wurde durch ein anderes problem.
War ich der Erbringung der Dienstleistung in zwei verschiedenen Punkten. Ich hatte geschrieben:
war und ich auch das Modul in der
app.module.ts
. Also, wenn Sie auf diese Fehlermeldung Sie können dies überprüfen, bevor er vorInformationsquelleAutor Cristian Traìna
Passiert es mir tut, unit-test auf der Uhr Modus.
Aufhören zu bauen, lösen Sie es sich wieder = der Fehler ist Weg.
InformationsquelleAutor Leo Lanese