Dies ist mein Beitrag Route anzuzeigen:Express Pass Werte in Route mit ejs
// CRUD posts.
app.post('/crud', function(req, res) {
db.users.addPost(req.body);
res.redirect('crud')
});
Das ist meine Route planen:
app.get('/crud', function(req, res) {
res.render('crud', {
user: req.user,
posts: db.users.retrievePost()
});
});
Dies ist die Funktion, die ich verwende Beiträge aus meiner Datenbank abrufen :
// Retrieve posts from database to pass to view.
exports.retrievePost = function() {
var cursor = postsCollection.find().toArray(function(err, record) {
console.log(record);
return record;
});
}
Wenn ich Rekord einzuloggen, es gibt die folgenden Daten:
[
{ _id: 57cb835ba8b8250bdcd65e5d, userCreate: 'This is a question' },
{ _id: 57cb85709435720c055b10e6, userCreate: 'hello' },
{ _id: 57cb87b10dc3ec0c3a78f970, userCreate: 'hello' },
{ _id: 57cb87c20dc3ec0c3a78f971, userCreate: 'what up here' }
]
So verwende ich ejs, um die userCreate-Werte in meiner "Crud" -Ansicht anzuzeigen.
<ul class="posts">
<% for(var i=0; i<posts.length; i++) { %>
<li class="post">
<span><%= posts[i].userCreate %></span>
</li>
<% } %>
</ul>
Der Fehler ist: Kann nicht Eigenschaft 'Länge' undefinierter lesen.
Warum sollten Beiträge nicht definiert sein? In meiner get Route, als ich die Ansicht gerendert habe, habe ich den Wert von retrievePost() den Posts zugewiesen. Ich habe dann Beiträge von dieser Ansicht aufgerufen, die gerendert wurde. Wir können davon ausgehen, dass die Funktion ordnungsgemäß exportiert wird, da ich andere Funktionen aus derselben Datei in derselben Routes-Datei verwende. Was ist hier falsch?
Ich möchte diesen Beitrag die Tatsache hinzufügen, dass ich
title : "testing"
getestet vorbei und konnte es in der folgenden Art und Weise machen:
<%= title %>
Also ich bin wirklich nicht sicher, warum Beiträge nicht funktionieren.
Weil der Wert von 'posts', die an' res.render' übergeben wurden, nicht definiert ist. Die 'postsCollection.find()' wurde nicht zurückgegeben, und der Wert wird nie zurück gegeben. Sie müssen 'retrievePost' auch einen Rückruf annehmen (oder es mit Versprechen tun, usw.). –
Ich denke ich sehe was du meinst. Die mit dem Cursor verknüpfte anonyme Funktion gibt record zurück, retrievePost() jedoch nicht. Ist das was du sagst? Wenn ja, ich denke du hast Recht. Wie hätte ich dann retrievePost() die Daten anstelle der anonymen Funktion zurückgeben sollen? –