Jade模板无法从快递

时间:2016-05-30 14:47:23

标签: node.js express mongoose keystonejs

我知道this个问题的标题几乎相同,但问题不同。

我正在使用内置于最新Keystone.js版本中的Jade模板引擎v.1.11.0。在控制器中,我使用两个 view.on('init')回调查询数据。第一个回调只查询一条记录并始终通过。第二种有时不会。

category.js

var keystone = require('keystone');
var async = require('async');
exports = module.exports = function (req, res) {

    var view = new keystone.View(req, res);
    var locals = res.locals;

    // Init locals
    locals.section = 'category';
    locals.filters = {
        category: req.params.category
    };
    locals.data = {
        sections: [],
        category: {}
    };

    // Load current category
    view.on('init', function (next) {

        var q = keystone.list('Category').model.findOne({
            key: locals.filters.category
        });

        q.exec(function (err, result) {
            locals.data.category = result;
            locals.section = locals.data.category.name.toLowerCase(); 
            next(err);
        });
    });


    // Load sections
    view.on('init', function (next) {   
        var q = keystone.list('Section').model.find().where('category').in([locals.data.category]).sort('sortOrder').exec(function(err, results) {

            if (err || !results.length) {
                return next(err);
            }

            async.each(results, function(section, next) {
                keystone.list('Article').model.find().where('section').in([section.id]).sort('sortOrder').exec(function(err, articles){
                    var s = section;
                    if (articles.length) {
                        s.articles = articles;
                        locals.data.sections.push(s);
                    } else {
                        locals.data.sections.push(s);
                    }
                });             

            }, function(err) {
                console.log(locals.data.sections);
            });

            next(err);
        });
    });

    view.render('category');
};

在我看来,我应该总是通过这个:

sections: { _id: 574b909b43ff68163ed86bf2, publicTitle: 'Title 1', key: 'name-1', sortOrder: 3, name: 'Name 1', __v: 0, category: 574b8960947f45f034ac89b4, text: '', image: {} }

category: { _id: 574b8960947f45f034ac89b4, key: 'blabla', sortOrder: 1, name: 'Blabla', __v: 0, image: {} }

但是有60%的时间,我得到了这个:

sections:

category: { _id: 574b8960947f45f034ac89b4, key: 'johndoe', sortOrder: 1, name: 'JohnDoe', __v: 0, image: {} }

奇怪的是,如果我去另一个类别,其中更多部分和30篇文章,我会在90%的时间内获得部分,但仍然会错过10%。这在开发和生产中都存在。

有些“ next()”过早发射吗?我看不清楚搞砸了。

1 个答案:

答案 0 :(得分:0)

好的。在对this.setState({ data: result }) 进行一些阅读后,我设法使用async正确使用它。

async.parallel