【发布时间】:2015-05-16 12:41:42
【问题描述】:
我有一个 keystonejs 应用程序设置,使用 express 和 jam。
我的 default.jade 文件中有一个全屏背景图像设置,它定义了各种导入以及网站的页眉和页脚。
我正在尝试根据通过 mongoose 位于 mongodb 中的图像选择来旋转图像。
我在让它工作时遇到问题,所以我一直在尝试让变量在我的页面标题中正确打印。
我的根中间件文件中有以下代码设置,作为 export.initLocals 文件的一部分:
exports.initLocals = function(req, res, next) {
var locals = res.locals;
locals.navLinks = [
{ label: 'Home', key: 'home', href: '/' },
{ label: 'News', key: 'blog', href: '/news' },
{ label: 'Creations', key: 'creation', href: '/creations' },
{ label: 'Contact', key: 'contact', href: '/contact' }
];
locals.user = req.user;
locals.imageURL = 'variable set';
WelcomeImage = keystone.list('WelcomeImage');
WelcomeImage.model.findOneRandom(function(err, result) {
if (!err) {
locals.imageURL = result.Image.url;
console.log(result.Image.url); // 1 element
} else {
console.log(err); // 1 element
}
});
next();
};
在我的 default.jade 文件中,我有:
//- HTML BODY
body
#background-image
//- HEADER
#header: .container
//- Customise your site's navigation by changing the navLinks Array in ./routes/middleware.js
//- ... or completely change this header to suit your design.
div(role="navigation").navbar.navbar-default
.container-fluid
.navbar-header
.visible-xs.navbar-brand-xs.a(href='/')
img(align:"left",src="/images/wild_logo.png",border=0,width=45,height=45)
button.navbar-toggle(type='button', data-toggle='collapse', data-target='.navbar-collapse')
span.sr-only Toggle navigation
span.icon-bar
span.icon-bar
span.icon-bar
.collapse.navbar-collapse
.hidden-xs.navbar-brand.a(href='/')
img(align:"left",src="/images/wild_logo.png",border=0,width=95,height=95)
ul.nav.navbar-nav.navbar-left
each link in navLinks
li(class=(section == link.key ? 'active' : null)): a(href=link.href)= link.label
ul.nav.navbar-nav.navbar-right
if user
if user.canAccessKeystone
li: a(href='/keystone') Open Keystone
li: a(href='/keystone/signout') Sign Out
else
if imageURL
| #{imageURL}
else
There is no variable
//li: a(href='/keystone/signin') Sign In
//- BODY
#body
现在每次我加载页面时,我都会看到页面中呈现的变量,但它被设置为“变量集”并且永远不会被设置为实际的 URL。
现在,如果我观看控制台,正确的值会在本地设置后直接在线发送到控制台。
所以,任何想法我做错了什么。我对表达/玉很陌生,所以很可能我忽略了事情完成的顺序?
提前致谢!
干杯
加雷斯
【问题讨论】:
-
尝试在
findOneRandom调用的回调函数中移动next()。您基本上是在告诉节点在回调完成之前继续前进是安全的。 -
整理好了,谢谢。在下面添加它作为答案,我会接受它。
标签: javascript node.js express mongoose pug