Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用mongodb、node.js、express和EJS创建动态站点地图?_Node.js_Mongodb_Express_Ejs_Sitemap.xml - Fatal编程技术网

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

如何使用mongodb、node.js、express和EJS创建动态站点地图?,node.js,mongodb,express,ejs,sitemap.xml,Node.js,Mongodb,Express,Ejs,Sitemap.xml,我正在尝试为我的网站创建一个动态的站点地图,它有很多经常更改的页面。 需要从www.mywebsite.com/sitemap.xml访问站点地图 我当前的尝试是查询数据库中的所有页面,获取每个页面的url,并将其传递给创建类似XML的EJS模板 我这里有两个问题 到页面的路由不能有文件后缀。e、 g.xml' 该页面将自动视为html 我意识到使用“express sitemap”等模块创建站点地图还有其他选择,但我还没有找到任何易于理解(我是新手)的文档,这对我来说似乎是一种很好的方法是的,

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

我当前的尝试是查询数据库中的所有页面,获取每个页面的url,并将其传递给创建类似XML的EJS模板

我这里有两个问题

  • 到页面的路由不能有文件后缀。e、 g.xml'
  • 该页面将自动视为html

  • 我意识到使用“express sitemap”等模块创建站点地图还有其他选择,但我还没有找到任何易于理解(我是新手)的文档,这对我来说似乎是一种很好的方法

    是的,您可以使用
    express sitemap

    自动生成站点地图的步骤 动态生成。。 例如,假设您有产品页面,并且为它们指定了url。。 您可以每次创建动态文件并将其放置在公用文件夹中

    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 );
      });
    });
    

    下面是我如何制作txt站点地图的。我发现谷歌搜索控制台比xml站点地图更容易获取txt站点地图。但是,如果您想制作一个xml站点地图,可以查看正确的格式。此代码使用Mongoose并保存为/pages/sitemap.txt.js

    //pages/sitemap.txt.js
    从“./utils/dbConnect”导入数据库连接;
    从“./models/Pduct”导入Pduct;
    const createSitemap=(posts)=>`${posts
    .map({slug})=>{
    返回`https://[您的域]/${slug}`;
    })
    .join(“\n”)}
    `;
    导出异步函数getServerSideProps({res}){
    等待dbConnect();
    const request=wait Pduct.find({},“slug”).lean();
    res.setHeader(“内容类型”、“文本”);
    res.write(createSitemap(请求));
    res.end();
    }
    导出默认值()=>null;
    
    您使用的是哪个版本的nodejs?您好,我使用的是v6.11.2版本
    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 );
      });
    });