从快速中间件向jade发送变量

时间:2015-03-13 21:30:12

标签: javascript node.js express mongoose pug

我有一个keystonejs app设置,使用express和jade。

我在default.jade文件中设置了全屏背景图像,该文件定义了各种导入以及网站的页眉和页脚。

我正在尝试根据通过猫鼬位于mongodb中的一系列图像来旋转图像。

我遇到了让它工作的问题,所以我一直试图让变量在我的页面标题中正确打印。

我的root中间件文件中有以下代码设置,作为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。

现在,如果我观看控制台,在本地设置后,直接将正确的值发送到线路上的控制台。

所以,任何想法我做错了什么。我是非常新的表达/玉,所以我可能会按顺序忽略某些事情?

提前致谢!

干杯

加雷

1 个答案:

答案 0 :(得分:0)

尝试在next()调用的回调函数中移动findOneRandom。您基本上告诉节点,在回调完成之前继续前进是安全的。

很高兴有帮助。谢谢!