2017-12-18 9 views
0

Ich habe für viel zu viele Stunden jetzt versucht, und ich kann es einfach nicht funktionieren. Ich mache eine Login-Seite, wo Sie im Grunde nur den Benutzernamen eingeben und es holt dann die Informationen aus der Datenbank und aktualisiert das Objekt auf dem Frontend (einziger Unterschied ist die ObjectID wurde hinzugefügt). Hier ist was ich will:Wie Mongoose Backend-Klasse zu Frontend-Klasse zu verbinden (Ionic mit Angular.io)

  1. Laden Sie die Login-Seite, die Sie zur Eingabe eines Benutzernamens auffordert.
  2. Sie geben den Benutzernamen ein. Mehrere Dinge können hier geschehen:
    1. Es ist in der Datenbank mit dem neuen Benutzernamen einen neuen Eintrag erstellt und gibt den neuen Benutzer mit: ObjectID und Username
    2. Es gibt den Eintrag aus der Datenbank (von find())

Das ist nichts verrückt, aber ich kann einfach nicht bekommen Vergangenheit einen Fehler:

TypeError: Cannot read property 'username' of null

login.html

<ion-content> 
    <ion-input placeholder="Username" [(ngModel)]="user.username"></ion-input> 
    <button ion-button (click)="submit()">Submit</button> 
</ion-content> 

login.ts

export class LoginPage { 
    appStorage: Storage; 
    user = { 
    id: "test", 
    username: "test" 
    }; 
    //user: User; 
    //user: Object = {}; 

    constructor(private storage: Storage) { 
    this.appStorage = storage; 

    storage.get('user').then(user => { 
     this.user = user; 
    }); 
    } 

    submit() { 
    this.appStorage.set("user", this.user); 
    } 

    ngOnInit() { 
    this.user = { 
     id: "test", 
     name: "test" 
    }; 
    } 
} 

User.ts

export class User { 
    public id: string; 
    public username: string; 

    constructor(public inputId?: string, public inputUsername?: string) { 
     this.id = inputId; 
     this.username = inputUsername; 
    } 
} 

Ich habe rund um die User-Klasse versucht zu ändern Ich habe, Ich habe versucht, alles in eine Komponente zu verschieben, ich habe alles versucht Dinge, aber ich kann das einfach nicht zum Laufen bringen. Ich möchte, dass meine Backend-Mongoose-Klasse mit dem Frontend übereinstimmt. Gibt es eine Bibliothek, die das vielleicht für mich tun kann? Ansonsten werde ich sie einfach separat machen.

Ich würde wirklich gerne die Benutzerklasse verwenden, die ich habe, also verwende ich keine Objekte.

+0

'user' könnte auf' null' in Ihrem 'storage.get ('user') gesetzt werden ...' erhalten Sie etwas, wenn Sie 'console.log (user)' innerhalb des 'then' Callbacks? – Und3rTow

+0

@ Und3rTow Aaaah, das ist das Problem. Funktioniert jetzt gut - danke. Nun noch ein Problem: Ist meine Benutzerklasse korrekt? Ich kann es anscheinend nicht als Rückgabetyp in der 'storage.get()' setzen. – MortenMoulder

+0

@ Und3rTow Okay, wenn ich es stattdessen als Schnittstelle benutze, wie würde ich im Grunde sagen 'storage.get(). Then ((user: Benutzer) => {if (user) {this.user = user} else { this.user = new User();}}); - überprüfe im Prinzip, ob der Speicher einen Benutzer hat. Ist dies nicht der Fall, legen Sie einen leeren Benutzer fest. Sonst bekomme ich den gleichen Fehler. – MortenMoulder

Antwort

0

Ich glaube nicht, dass Sie das tun sollten. Sie sollten eine API verwenden, um mit Ihrem Back-End zu sprechen. und Sie können Ihre POJO-Schnittstellen bei Bedarf erneut verwenden. aber nicht Zugriff mongoosejs Speicher von Ihrem Front-End-Code.

Verwandte Themen