2017-12-29 31 views
0

MongoDBからの情報を表示する非常に単純なアプリケーションを構築しています(Mongooseを使用)。Node.js、Express、およびHandlebarsを使用して、ナビゲーションバーにMongoDBドキュメントのフィールド値を表示します。

文書のフィールド値をナビゲーションバーに表示する場合は、startedです。 これはすべての1ページに表示される必要があります。

{ 
    "_id" : ObjectId("5a4668271f12a77878e97bf1"), 
    "started" : 1514563623, 
    "discipline" : "coding", 
    "isCompleted" : false, 
    "date" : ISODate("2017-12-29T16:07:03.340Z"), 
    "__v" : 0 
} 

私は、ハンドルバーヘルパーの内部で関数を作成しようとしました。しかし、私は通常同じ問題に遭遇する:私はconsole.logそれをすることができますが、私はreturnできません。

ミドルウェアの作成も試みました。ローカルホスト環境では多かれ少なかれ問題なく動作しますが、プロダクション環境にプッシュすると動作しません。

var currentLogNavBar = function (req, res, next) { 

    // Load Model 
    require('./models/Log'); 
    const Log = mongoose.model('logs'); 

    Log.findOne({ 
     isCompleted: false 
    }) 
    .then(logs => { 
     res.locals.lastLogSecondsStarted = logs.started || null; 
    }); 
    next() 
    } 

app.use(currentLogNavBar) 

そして、ナビゲーションバーハンドルでそれを呼び出す:

{{{lastLogSecondsStarted}}} 

私は問題がnode.js.の非同期性とは何かを持っていると思います

別のアプローチを使用する必要がありますか?私は間違って何をしていますか、どうすればそれを動作させることができますか?

ありがとうございます!

EDIT: MongoDBドキュメントの例を追加しました。

答えて

0

これは私の問題を解決:

var currentLogNavBar = function (req, res, next) { 

    // Load Model 
    require('./models/Log'); 
    const Log = mongoose.model('logs'); 

    Log.findOne({ 
     isCompleted: false 
    }) 
    .then(logs => { 
     res.locals.lastLogSecondsStarted = logs.started || null; 
     next(); 
    }) 
    .catch(err => { 
     next(err); 
    }); 

app.use(currentLogNavBar) 
関連する問題