Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.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
Javascript 创建meteor.js网站地图_Javascript_Meteor - Fatal编程技术网

Javascript 创建meteor.js网站地图

Javascript 创建meteor.js网站地图,javascript,meteor,Javascript,Meteor,网站地图很酷。如果我想为我的流星计划做一个,我想我可以做以下一个: 硬编码sitemap.xml文件并放入/public/文件夹。不是动态的,但谷歌很容易找到。对于子页面很少的应用程序来说,这可能已经足够了 (根本没有尝试过)使用meteor路由器在/sitemap.xml(?)创建一个动态站点地图,并将其输出为xml。动态的,但是google很难找到它,因为它是动态加载的(可能是使用spiderable包?) 但这两种情况对我都不是很满意。我希望它是动态的,但存储在一个(最好是)静态文件,谷歌

网站地图很酷。如果我想为我的流星计划做一个,我想我可以做以下一个:

  • 硬编码sitemap.xml文件并放入/public/文件夹。不是动态的,但谷歌很容易找到。对于子页面很少的应用程序来说,这可能已经足够了
  • (根本没有尝试过)使用meteor路由器在/sitemap.xml(?)创建一个动态站点地图,并将其输出为xml。动态的,但是google很难找到它,因为它是动态加载的(可能是使用spiderable包?)
  • 但这两种情况对我都不是很满意。我希望它是动态的,但存储在一个(最好是)静态文件,谷歌很容易找到。或者类似的


    最好的方法是什么?

    如果有一种方法可以使用客户端路由器动态生成站点地图,那么Meteor router也可以

    你需要和meteor的http。流星路由器有一个特权,看起来你已经有了

    因此,第一步是使用服务器端路由为该sitemap.xml创建路由:

    Meteor.Router.add('sitemap.xml', function() {
        //get sitemap data (below)
        return generated_sitemap;
    });
    
    以及生成站点地图的功能:

    我们需要
    router.js
    ,不幸的是,它只在客户端上运行。所以我们需要用meteor.http获取它。
    router.js
    文件基本上包含
    Meteor.router.add
    路由器代码位。将url调整到
    router.js
    文件可能存储的位置

    routerdata = Meteor.http.get("http://localhost:3000/client/router.js").content 
    
    然后,我们需要从那里解析路由器数据(确保使用var,这样作用域就不会破坏实际的路由器)

    服务器端js

    Meteor.Router.add('/sitemap.xml', function() {
        routerdata = Meteor.http.get("http://localhost:3000/client/router.js").content 
        var Meteor = {};
        Meteor.Router = {add:function(input) {return input}};
    
        //drag the data out of the routerdata, eval is quick and dirty but you could shackle it down further
        routers = eval(routerdata);
    
        //now generate the sitemap.xml data
    
        xmldata = '<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
        for(var url in routers) {
            xmldata+="<url>\n";
            xmldata+="<loc>"+url+"</loc>\n";
            xmldata+="<lastmod>2013-03-03</lastmod>\n";
            xmldata+="<changefreq>daily</changefreq>\n";
            xmldata+="<priority>0.8</priority>\n";
            xmldata+="</url>\n";
        }
    
        xmldata+="</urlset>";
    
        return xmldata;
    });
    
    Meteor.Router.add('/sitemap.xml',function(){ routerdata=Meteor.http.get(“http://localhost:3000/client/router.js1.内容 var Meteor={}; Meteor.Router={add:function(input){returninput}}; //将数据从routerdata中拖出,eval既快又脏,但您可以进一步限制它 路由器=eval(路由器数据); //现在生成sitemap.xml数据 xmldata=''; for(路由器中的var url){ xmldata+=“\n”; xmldata+=“”+url+“\n”; xmldata+=“2013-03-03\n”; xmldata+=“每日\n”; xmldata+=“0.8\n”; xmldata+=“\n”; } xmldata+=”; 返回XML数据; });
    您可能需要进一步定制它,使其符合您的需要。我不能说我已经尝试过上述方法,我对如何优化使用网站地图并不十分熟悉,但这可能会让你有一个开始

    这个软件包看起来很有希望:


    事实上,我昨天也开始写类似的东西,不过我确实想要一个sitemap.xml的实际文件(对谷歌来说感觉最安全),并让node.js fs模块来编写文件和所有内容。谢谢你的回复,如果有什么值得分享的,我会发回这里。