繁体   English   中英

从Express中间件向Jade发送变量

[英]Sending a variable from express middleware to jade

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

我的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。

现在,如果我观看控制台,则在将其设置为本地变量后,会立即将正确的值直接发送到控制台。

所以,任何想法我在做什么错。 我非常想表达自己的想法/玉,所以我可能会按顺序忽略某些内容?

提前致谢!

干杯

加雷斯

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

很高兴提供了帮助。 谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM