gpt4 book ai didi

node.js - 如何使用 mongodb、node.js、express 和 EJS 创建动态站点地图?

转载 作者:太空宇宙 更新时间:2023-11-03 22:45:24 25 4
gpt4 key购买 nike

我正在尝试为我的网站创建动态站点地图,它有很多经常更改的页面。需要从 www.mywebsite.com/sitemap.xml 访问站点地图

我当前尝试查询数据库中的所有页面,获取每个页面的 url 并将其传递给一个 EJS 模板,该模板创建看起来像 XML 的内容。

我这里有两个问题

  1. 页面的路由不能有文件后缀。例如'.xml'
  2. 页面自动被视为 html

我意识到还有其他选项可以使用“express-sitemap”等模块创建站点地图,但我无法找到任何易于理解的(我对此不熟悉)文档,并且这对我来说似乎是一个很好的做事方式

最佳答案

是的,您可以使用express-sitemap

自动生成站点地图

var sitemap = require('express-sitemap')();

var app = require('express')();

sitemap.generate(app);

动态生成..

假设您有产品页面并且已为它们指定了网址..您每次都可以创建一个动态文件并将其放置在您的公共(public)文件夹中。

const Product = require('./model/product')
const sitemap = require('sitemap');
let sitemapData;
const generateSitemap = async () => {
const products = await Product.find({},{path: 1});
const urls = products.map({path} => `/products/${path}`)
sitemapData = sitemap.createSitemap ({
hostname: 'http://example.com',
cacheTime: 600000, // 600 sec - cache purge period
urls
});
}

您可以在例程中或与 cron 一起使用此功能并定期生成站点地图..

setInterval(generateSitemap, 360000); //running every hour

您可以做的其他事情是:

使用sitemapData变量并执行类似的操作。

sitemapData.add({url: '/product-a/'}); // when some product is added
sitemapData.add({url: '/product-b/', changefreq: 'monthly', priority: 0.7});
sitemapData.del({url: '/product-c/'}); // when something is removed
sitemapData.del('/product-d/');

你可以通过这样的路线提供它:

app.get('/sitemap.xml', function(req, res) {
sitemapData.toXML( function (err, xml) {
if (err) {
return res.status(500).end();
}
res.header('Content-Type', 'application/xml');
res.send( xml );
});
});

关于node.js - 如何使用 mongodb、node.js、express 和 EJS 创建动态站点地图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49749798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com