将变量从 express 中间件发送到 jade

Sending a variable from express middleware to jade

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

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

我正在尝试根据位于 mongodb 中的一组图像通过 mongoose 旋转图像。

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

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

现在每次加载页面时,我都会看到页面中呈现的变量,但它被设置为 'variable set' 并且永远不会设置为实际的 URL.

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

所以,任何想法我做错了什么。我是 express/jade 的新手,所以我可能忽略了一些事情的完成顺序?

提前致谢!

干杯

加雷思

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

很高兴对您有所帮助。谢谢!