2016-07-28 12 views
1

Ich entwickle eine Website mit Winkelmeteor und ich habe ein seltsames Problem konfrontiert. Auf jeder Seite habe ich einen Chatblock, die Nachrichten werden in der Sammlung chatMessages gespeichert und korrekt angezeigt. Das Problem ist, dass jedes Mal, wenn ich den aktuellen Benutzer bearbeite (manuelle Mongo-Dokument-Edition oder Aktualisierung innerhalb der Methode des Meteors), meine App alle Abonnements entfernt. Dies führt dazu, dass Nachrichten nicht mehr im Chat verfügbar sind. Aber nicht nur Chat-Nachrichten verschwinden. Ich habe this piece of code verwendet, um zu verstehen, was die Ursache des Problems ist, aber ich kann es kaum verstehen. Hier sind die interessantesten Teile von Browser-Konsolen-Ausgabe:Immer wenn ich den aktuellen Benutzer aktualisiere, werden alle Sammlungen geleert (eigentlich nicht)

// On page load 
send Object { 
    msg: "sub", 
    id: "EPgQwMiDggM7wafCN", 
    name: "chatMessages", 
    params: Array[0] 
} 
receive Object { 
    msg: "added", 
    collection: "chatMessages", 
    id: "G6tv76ZSJYXmnsrAY", 
    fields: Object 
} 

// Calling 'createArenaRoom' method 
send Object { 
    msg: "method", 
    method: "createArenaRoom", 
    params: Array[1], 
    id: "8", 
    randomSeed: "516b5128615f1c7849f2" 
} 

// User updated 
receive Object { 
    msg: "changed", 
    collection: "users", 
    id: "sQnaLPj2FvH692rQM", 
    fields: Object 
} 

// ??? WHY ???? 
send Object { 
    msg: "unsub", 
    id: "EPgQwMiDggM7wafCN" 
} 
receive Object { 
    msg: "removed", 
    collection: "chatMessages", 
    id: "G6tv76ZSJYXmnsrAY" 
} 
receive Object { 
    msg: "nosub", 
    id: "EPgQwMiDggM7wafCN" 
} 

Übrigens, Daten werden nicht aus Mongo entfernt. Wenn ich die Seite aktualisiere, erscheinen Chat-Nachrichten und alles andere wieder.

Jede Hilfe wäre willkommen.

+0

Es wird einfacher, den Code zu betrachten. – vijayst

Antwort

0

Endlich habe ich die Ursache des Problems herausgefunden. In meinem main.html hatte ich so etwas wie dieses:

<div ng-if="$root.loggingIn" class="loading-screen"></div> 
<myapp ng-if="!$root.loggingIn"></myapp> 

Dies machte wurde Komponente Codeausführung zu verhindern, bevor die Daten des aktuellen Benutzers zur Verfügung steht. Ich entfernte ng-if="!$root.loggingIn" von myapp Richtlinie und das Problem verschwand. Ich kann nur raten, warum es so ein seltsames Verhalten verursacht hat. Jetzt verwende ich this.autorun() in Komponenten, um auf Benutzerdaten zu warten.