1

このアプリケーションのコードを操作し、views/layout.jadeファイルにサイドバーを配置しました。サイドバーで、views/index.jadeからタグを処理するためのコードを切り取って貼り付けました。

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

タグは必要に応じてデータベースからフェッチされ、サイドバーに表示されますが、タグの1つをクリックすると(タグでタグ付けされたすべての投稿を含む新しいページが表示されます)、エラーメッセージが表示されます。

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に戻すと、すべて正常に機能します。ただし、ホーム(index.jade)だけでなく、すべてのページに表示できるようにするには、layout.jadeに含める必要があります。

助けていただければ幸いです。

4

1 に答える 1

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 }
于 2012-04-19T16:17:04.117 に答える