如何在使用KeystoneJS加载页面之前从mongo加载数据?

时间:2017-08-08 19:14:29

标签: mongodb express handlebars.js middleware keystonejs

我正在使用KeystoneJS和Handlebars来查看视图。我一直试图从MongoDB中获取一个公司列表,以便在导航栏中加载,但没有成功。我知道去哪里更新navLinks,我可以在一个页面上从mongodb加载公司。我想在导航中的所有页面上加载公司列表,并且公司列表不是静态的。在导航渲染之前,我会将代码放在何处加载数据?

2 个答案:

答案 0 :(得分:0)

您可以在routes / middleware.js中的'initLocals'中间件中添加自己的局部变量,这些中间件将在执行路径控制器之前运行:

路由/ middleware.js

exports.initLocals = function(req, res, next) {

    var locals = res.locals;

    locals.user = req.user;

    // Add your own local variables here

    next();

};

查看Keystone.js文档中的 Common Route Middleware 部分: http://keystonejs.com/docs/getting-started/

答案 1 :(得分:0)

我终于开始工作了

exports.initLocals = function (req, res, next) {
        res.locals.navLinks = [
            { label: 'Accueil',         key: 'home',        href: '/' },
            { label: 'Projets',         key: 'projects',    href: '/projects' },
            { label: 'Contacts',        key: 'users',       href: '/contacts' },
            { label: 'Livrables',       key: 'deliverables',href: '/deliverables' },
            { label: 'Fichier sources', key: 'sources',     href: '/sources' }
        ];

        //Get available companies for the user
        var view = new keystone.View(req,res);
        view.query('companies', keystone.list('Company').model.find().populate('project').sort('title')).then(function (err, results, next) {
            if (err) return next(err);
            next();
        });
        view.render(function(){
            next();
        });
    };