2016-08-11 3 views
0

私はexpress-sitemapミドルウェアを使用して自分のウェブサイトのサイトマップを生成しようとしています。次のように私のコードは次のとおりです。(ノード/ Express)間違ったサイトマップを生成するエクスプレスサイトマップ

var sitemap = require('express-sitemap')(); 
//... 
app.get('/', function(req, res) { 
    res.render('index') 
}) 
//... 
posts = [ 
    post2 = { 
    "url": 
    "wild-birds", 
    },  
    post1 = { 
    "url": 
    "top-dogs-cats", 
    } 
] 

app.get('/:leg', function(req, res, next) { 
    for (i=0; i<posts.length; i++) { 
     if (req.params.leg == posts[i].url) { 
      res.render('post', { posts2:posts[i] }); 
     } 
    } 
//The above code checks to see which blog post was requested by 
//the user, and responds by rendering the associated HTML (with some 
//additional information I chose to exclude from this post) 
}) 

console.log(sitemap.generate(app)) 

この出力:

{ '/': [ 'get' ], 
    '/:leg': [ 'get' ] } 

それが出力する必要があります。

{ '/': [ 'get' ], 
    '/wild-birds': [ 'get' ], 
    '/top-dogs-cats': [ 'get' ] 
} 

どのようにすべきとこのサイトマップジェネレータを修正するつもりですか?さらに、修正されたsitemap.xmlをユーザーに提供することをどのように提案しますか?

答えて

1

express-sitemapは、すべての登録済みルートを繰り返してサイトマップを生成します。内部的にはapp._router.stackと呼ばれ、すべてのルートがフィルタリングされます。

パラメータを使用する代わりに、投稿として明示的にルートとして登録する必要があります。代わりに、次の操作を行います。

{ '/': [ 'get' ], 
    '/wild-birds': [ 'get' ], 
    '/top-dogs-cats': [ 'get' ] } 

posts.forEach(function(post) { 
    app.get('/' + post.url, function(req, res, next) { 
    res.render('post', { 
     posts2: post 
    }); 
    // your logic... 
    }); 
}); 

は、その後、あなたが期待するものconsole.log(sitemap.generate(app))リターンを呼び出します

関連する問題