使用 Node.js、Express 和 Handlebars 在导航栏中显示 MongoDB 文档的字段值

Display a field's value of a MongoDB document in the navigation bar, using Node.js, Express and Handlebars

我正在构建一个非常简单的应用程序来显示来自 MongoDB 的信息(使用 Mongoose)。

我想在导航栏中显示文档的 started 字段值。 所以它必须显示在每个页面上。

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

我试过在 Handlebars Helper 中创建一个函数。但是我经常运行遇到同样的问题:我可以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 的异步性质有关。

我应该使用其他方法吗?我做错了什么,我该如何让它发挥作用?

谢谢!

编辑: 添加了 MongoDB 文档的示例。

这解决了我的问题:

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)