2017-11-30 4 views
0

Ich glaube, ich habe mich selbst durch tausende Tutorials geklickt, aber ich bin immer noch an dieser Stelle fest: Ich möchte alle Daten rendern, die meine Express-App schreibt in mongodb am Anfang, in eingebettetes Javascript. Ich hätte gerne eine einfache Tabelle, die alle Daten von mongodb zeigt. Es sollte auch immer die aktualisierten Daten erhalten, wenn die Route aufgerufen wird.Weitergabe von MongoDB Daten in .ejs-Template mit Node.js Express

Meine erste Idee war, die Daten in einem Array zu speichern. Übergeben Sie es an die .ejs-Datei. Erstellen Sie eine Tabelle, durchlaufen Sie mein Daten-Array und schreiben Sie es ein. Mein Problem ist, dass ich die Daten nach Aufruf der find() - Funktion nicht in ein Array schreiben kann.

Das Modell subscriber.js:

const mongoose = require('mongoose'); 
var uniqueValidator = require('mongoose-unique-validator'); 

var subscriberSchema = mongoose.Schema({ 

nr: Number, 
mailIdent: { 
    type: String, 
    unique: true 
}, 
from: String, 
emails: { 
    type: String, 
    default: '' 
}, 
text: String, 
uLink: String, 
anwalt: Boolean, 
create_date:{ 
    type: Date, 
    default: Date.now 
} 
}); 

subscriberSchema.plugin(uniqueValidator); 

var Subscriber = module.exports = mongoose.model('Subscriber', subscriberSchema); 

Ich bin zu dem Thema wirklich neu und es fühlt sich an wie ich um bin nur verwirren. Bitte helfen

//get Subscriber 
/*module.exports.getSubscribers = Subscriber.find(function(err, subs){ 
    if(err) return console.error(err); 
    console.log(subs); 
}); 
*/ 
module.exports.subscriber = Subscriber; 

module.exports.getSubscriberByID = function(_id, callback){ 
    Subscriber.findById(_id, callback); 
}; 
module.exports.getSubscribers = function(){ 
    var subscribers = Subscriber.find({}); 
    return subscribers; 
}; 

Dann habe ich es mit meinem app.js des index.ejs übergeben möge:

app.get('/', function(req, res){ 
    var subs = Subscriber.getSubscribers().toArray(); 
    console.log(subs); 
    res.render('index',{subs: subs}); 
}); 

Ich weiß, dass mein .ejs noch ein wenig einfacher zu sein scheint. Aber so weit ist es nur funktional sein:

<!DOCTYPE html> 
<html> 
<head> 
<link href="/assets/styles.css" rel="stylesheet" type="text/css" /> 
</head> 
<body> 
<% include partials/nav.ejs %> 
<h1>Welcome to the Database</h1> 
<p>You won't find more Information than here!</p> 
<p>Table</p> 

<table> 
<colgroup span="5" class="columns"></colgroup> 
<tr> 
    <th>Nr</th> 
    <th>Name</th> 
    <th>Mail</th> 
    <th>uLink</th> 
    <th>Anwalt</th> 
</tr> 
<% for (var i = 0; i<subs.length; i++) { %> 
<tr> 
    <td><%= subs[i].nr</td> 
     <td><%= subs[i].name</td> 
     <td><%= subs[i].email</td> 
     <td><%= subs[i].uLink</td> 
     <td><%= subs[i].anwalt</td> 
     </tr> 
     <% } %> 
</table> 
</body> 
</html> 
+0

Es machte mich verrückt und schließlich fand ich heraus. Ich habe das Javascript in der .ejs-Datei nicht geschlossen. Das war definitiv der dümmste Fehler überhaupt –

+0

Kannst du Fehler zeigen – YouneL

Antwort

0

Das Folgende ist aus Mungo docs:

Abfrage # find ([Kriterien], [Rückruf])

Wenn kein Rückruf übergeben wird , die Abfrage wird nicht ausgeführt. Wenn die Abfrage ausgeführt wird, wird das Ergebnis ein Array von Dokumenten sein.

Sie einen Rückruf verwenden können wie Sie mit getSubscriberByID Funktion tun, hier ist ein Beispiel:

subscriber.js:

... 

module.exports.getSubscribers = function(cb){ 
    Subscriber.find({}, cb); 
}; 

app.js

app.get('/', function(req, res){ 
    Subscriber.getSubscribers(function (err, subs) { 
     if (err) throw err; 
     // else render result 
     res.render('index', { subs: subs}); 
    }); 
}); 
0

Es hat mich verrückt gemacht und schließlich habe ich es herausgefunden. Ich habe das Javascript in der .ejs-Datei nicht geschlossen. Das war definitiv der dümmste Fehler überhaupt

+0

So können Sie die Liste der Abonnenten mit dieser Zeile erhalten: 'var subscribers = Subscriber.find ({});' – YouneL

Verwandte Themen