2016-08-25 2 views
0

Empfangen einer Fehler-Nachricht, die lautet: "Eigenschaft 'indexOf' von undefined kann nicht gelesen werden." Ich bekomme die Reisepass-ID in der Ansicht, aber die Reisepass-ID wird nicht zur Funktion weitergeleitet. Außerdem bekomme ich meine console.logs aus irgendeinem seltsamen Grund nicht. Jede Hilfe wäre so großartig!Fehler msg "Kann die Eigenschaft 'indexOf' von undefined nicht lesen"

Hier ist mein HTML, die auf dem 'userLikes' Filter ruft:
(Full-Code an: https://github.com/cdtdesign/TCP-Express/blob/master/views/blog.html)

<a class="like-button" title="Like"> 
        <i class="fa fa-heart {{journey.passport_id | userLikes}}"></i> 
       </a> 
       {% if user.passport_id == journey.passport_id %} 
       <a href="#modal-text/{{ String(journey._id) }}#update" title="Edit"> 
        <i class="fa fa-pencil journeyEditButton"></i> 
       </a> 
       <a title="Delete"> 
        <i class="fa fa-close journeyDeleteButton" style="font-size:2.875rem;" data-journey-id="{{ String(journey._id) }}"></i> 
       </a> 
       {% endif %} 

Hier ist die JS das Problem verursacht:
(Full-Code an : https://github.com/cdtdesign/TCP-Express/blob/master/routes/blog.js)

if (req.user) { 
    swig.setFilter('userLikes', function(journeyPassportID) { 
     if (req.user.journeys_liked.indexOf(journeyPassportID) != -1) { 
     return 'liked'; 
     } 
    }); 

Auch der Code von meinem Lebensweg Modell, bei dem die passport_id stammt:

var journeySchema = new Schema({ 
    uuid: { 
     type: String, 
     default: uuid.v4() 
    }, 
    travel_token: { 
     type: String, 
     default: randomstring.generate() 
    }, 
    passport_id: String, 
    traveler_name: String, 
    title: String, 
    date: Date, 
    body: String, 
    description_filename: String, 
    header_image_filename: String, 
    users_who_like: Array, 
    tags: String, 
    shortlink: String, 
    deleted_at: String, 
    created_at: { 
     type: Date, 
     default: Date.now 
    }, 
    updated_at: { 
     type: Date, 
     default: Date.now 
    } 
}); 
+2

Bitte geben Sie uns den vollständigen Code. –

+2

'req.user.journeys_liked' ist nicht definiert. Daher die Fehlermeldung. Sie haben nicht genug Kontext in Ihrer Frage, damit jemand erraten kann, warum das so sein könnte. –

+0

@Jits Ich habe gerade mehr Kontext und Code aus der Ansicht hinzugefügt, wo der Filter auf der Reisepass-ID aufgerufen wird. Bitte lassen Sie mich wissen, ob dies ausreichend Information/Code ist, um das Problem zu beheben. Entschuldigung, ich bin ein kompletter Noob! Zusätzlich dazu, dass ich nicht genug Informationen zur Verfügung stelle, werde ich wahrscheinlich nicht die richtigen Fragen stellen. Entschuldigen Sie. Danke für alle Einsichten! – Chris

Antwort

0

journeys_liked ist nicht in req.user gespeichert werden. Wenn es undefined ist, bedeutet das, dass es keinen Wert für was auch immer gibt, rufen Sie die .indexOf() Methode auf. In diesem Fall wäre das . Ich würde sagen, zuerst prüfen, ob es einen Wert für diese Eigenschaft in der Datenbank geben sollte. Wenn es einen geben soll, ist es ein Problem, dass Passport den Wert nicht in req.user speichert.

Wenn es keinen Wert in der Datenbank gibt, denke ich, dass Sie auch die bedingte Prüfung für einen Wert machen sollten. Auf diese Weise wird es nur ausgeführt, wenn es einen Wert wie if (req.user.journeys_liked && req.user.journeys_liked.indexOf() gibt.

+0

Danke @Arcrammer. Ich sehe, dass "journeys_liked" im Travelers-Modell und nicht im Journeys-Modell enthalten ist, aber der Schlüssel oder der Wert werden in die Datenbank aufgenommen. Ich dachte, wenn der Schlüssel und der Typ in das Modell eingegeben werden, sollte es in der DB sein. Nein? Wie kommt es sonst in die DB? – Chris

+0

Sie wollen es definitiv im Modell 'Traveller', da die Kollektion' req.user' aus dieser Sammlung erstellt wird. Ich denke, Sie können es in die Datenbank programmatisch einfügen, wenn der Benutzer ein Formular oder eine andere Art und Weise, wie Sie sich ihm nähern, übermittelt (es muss nicht über ein Formular sein). Ich denke, wenn Sie nur einige Dummy-Datensätze in der "Travellers" -Kollektion mit den Daten füllen, sollte es nicht mehr "undefiniert" sein. – IIllIIll

Verwandte Themen