参考错误:“标签未定义”

时间:2012-04-17 13:08:01

标签: javascript node.js express pug

我操纵了this application中的代码,并在views / layout.jade文件中添加了一个侧边栏。在侧边栏中,我剪切/粘贴了处理来自views / index.jade的标记的代码:

    ul.tags
        each tag in tags
            a(href='/tag/' + tag._id.toHexString())
                li.tag= tag.name

标记是从数据库中提取的,并在边栏中呈现,但是当我点击其中一个标签时(应显示一个新页面,其中所有帖子都标记有标签),我收到一条错误消息:

500 ReferenceError: ... layout.jade:10 8| p 9| ul.tags > 10| each tag in tags 11|   
  a(href='/tag/' + tag._id.toHexString()) 12| li.tag= tag.name tags is not defined

这是在文件“tagcontroller.js”中调用的函数(它处理标签的逻辑):

app.get('/tag/:id', function(req, res){

    model.Tag.findById(req.params.id, function (err, tag){
        if (err) {
            console.log(err);
            // do something
        }

        var query = blogModel.BlogPost.find( { _id: { $in : tag.blogs } } );
        query.where('date').lte(new Date());

        query.exec(function (err, blogs) {
            if (err) {
                console.log(err);
                // do something
            }

            var query = model.Tag.find({});

            query.exec(function (err, tags) {
                if (err) {
                    console.log(err);
                    // do something
                }
                res.render('tags/detail', { title: tag.name, blogs: blogs, tagList: tags, dateFormatter: dateFormatter });  
            }); 
        });
    });
});

如果我将代码放回到views / index.jade中,一切正常。但我需要在layout.jade中将它显示在每个页面上,而不仅仅是在Home(index.jade)上。

我真的很感激一些帮助!

1 个答案:

答案 0 :(得分:2)

现在,你有:

res.render('tags/detail', { title: tag.name, blogs: blogs, tagList: tags, dateFormatter: dateFormatter });

但如果你正在做each tag in tags,那么你应该有类似

的东西
{ title: tag.name, blogs: blogs, tags: tags, dateFormatter: dateFormatter }