使用 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)
我正在构建一个非常简单的应用程序来显示来自 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)