【问题标题】:Sending a variable from express middleware to jade将变量从 express 中间件发送到玉
【发布时间】: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


【解决方案1】:

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

很高兴有帮助。谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-21
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    相关资源
    最近更新 更多