2017-11-30 9 views
0

私は何千ものチュートリアルを通して自分自身をクリックしたが、私はまだこの時点で固執していると思う。私はエクスプレスアプリが書いているすべてのデータをレンダリングする最初はmongodbに、埋め込まれたjavascriptに。私はmongodbからすべてのデータを表示している簡単なテーブルを持っていたいと思います。また、ルートを呼び出すときには、常に実際のデータを取得します。Node.js Expressを使った.ejs-TemplateへのMongoDBデータの受け渡し

私の最初のアイデアは、データを配列に保存することでした。これを.ejsファイルに渡します。私の問題は、find() - 関数を呼び出した後、配列にデータを書き込むことができないということです。

モデル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); 

私は、トピックには本当に新しいだと私はちょうどいじりてるようには感じています。

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

私が知っている、私の.ejsはまだ少しシンプルに思われること:その後、私はindex.ejsに私のapp.jsでそれを渡したい

//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; 
}; 

を助けてください。しかし、これまでのところ、それだけで機能しなければならない:

<!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

私は怒っていました。私は.ejsファイルのJavascriptを閉じなかった。それは間違いなく最も間違っていました –

+0

エラーを表示することができます – YouneL

答えて

0

次は、マングースのドキュメントからです:

クエリ#の検索([基準]、[コールバック])

コールバックが渡されていない場合、 クエリは実行されません。クエリが実行されると、結果は のドキュメントの配列になります。

あなたはここで、あなたがgetSubscriberByID機能を行うだけのようにコールバックを使用することができます例です。

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

私は怒っていましたそして最後に私は知った。私は.ejsファイルのJavascriptを閉じなかった。それは間違いなく最も間違ったミスステックでした

+0

この行のサブスクライバのリストを得ることができます: 'var subscribers = Subscriber.find({});' – YouneL

関連する問題