2017-11-07 6 views
0

私はnodejsでMVCを初めて使い、エラーを解決する方法を研究するのに多くの時間を費やしましたが、解決策はまだありません。 npmを起動するとcliを介して:mongodbから正しいデータが表示されますが、私のWebページには表示できませんでした。 私のルートである:コントローラ内のMongoDBクエリ

router.get('/gallery/description', artController.description); 

コントローラは:

var paintings = require('../models/get_painting'); 
console.log('this is the returned value of paintings ' + paintings); 

const description = function(req, res) {res.render('description', 
{title:'description', art: 'this is what i get ' + paintings)});}; 

モデル:私が言ったように

var paintings = require('./painting_schema'); 


var query = paintings.find({}).then(function(picture){ 
    console.log(picture); 
    return picture; 
    }).catch(function(err){}); 

module.exports = query; 

コントローラではconsole.logが正しい情報を返すが、通過するときWebページに表示されるすべての記述変数には[オブジェクトの約束]が表示されます。

ビュー:

extends layout 

block content 
    .container-fluid 
    each item in art 
     p= item 
+0

テンプレートを質問に追加できますか? – MikaS

+0

@MikaSあなたが探していたビューですか?私はそれを追加しました。 – Nathan

+0

ここでは間違っています。私はあなたのコントローラが別のモジュールに広がってそこから行くのではなく、すべてのコードを一緒に扱うようにすることをお勧めします。 – JohnnyHK

答えて

0

私はqueryは(技術的には、あなたがexec()を使用するまで、それは約束ではないですが、あなたは約束としてそれを使用することができます)約束であるため、この問題が発生したと仮定します。プロミスをエクスポートしますが、その結果はエクスポートしません。したがって、awaitを使用してそれが完了するのを待つ場合、あなたは約束そのものではなく絵画の書類を得るでしょう。

あなたの現在のスタイルで修正する方法を教えてください。ここで私はそれを構築する方法を次のとおりです。

artControllerファイル内部:

module.exports.description = async (req, res) => { 
    const paintings = await Painting.find({}) 

    res.render('description', { 
    title: 'description', 
    art: 'this is what i get ' + paintings 
    }); 

} 

asyncawaitに注意してください。

モデルには、絵画のスキーマが含まれている必要があります。その中のクエリを削除します。 mongoose.model(Painting, paintingSchema)でモデルを作成する場合は、const Painting = mongoose.model('Painting');でコントローラファイル内に取り込むことができます。

+0

私は非同期でいくつかの掘り出しを行い、あなたのメソッドを待っている全体的なクリーナーと少し理解しやすいように思える。特にこれが初めてのことで、私は素晴らしい情報を絞り込むことができました。私は、より良い/より簡単な結果の方向を指していることから、これを解決策としてマークします。 – Nathan