2017-05-04 74 views
1

送超值现在我有这样的代码来创建sitemap.xml的,当我运行/sitemap.xmlJS错误为:var未定义。我怎样才能在功能

database = firebase.database(); 
    var ref = database.ref('urls'); 
    ref.on('value', gotData, errData); 

    function errData(err){ 
     console.log('Error!'); 
     console.log(err); 
    } 


function gotData(data){ 
    result = data.val() 
    return Object.keys(result) 
    .filter(key => result[key].last_res > 5) 
    .map(key => ({url: '/' + result[key].url_site + '/'})); 
    var urls = gotData(data); 
} 

当我尝试在gotData(数据)功能运行的console.log(网址),它返回为

{ salmon: 
    { count: 1, 
    last_res: 10, 
    url_site: 'salmon' }, 
    'salmon-food': 
    { count: 1, 
    last_res: 601, 
    url_site: 'salmon-food' } } 

我需要在gotData(data)中返回'urls'来创建sitemap.xml。

var sitemap = sm.createSitemap({ 
      hostname: 'xxx.com', 
      cacheTime: 600000, 
      urls: urls 

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

,但现在它的变种=站点地图错误的

urls: urls -> urls is not defined 

那么,如何解决这个问题?

+0

哪里是*网址*申报? – RobG

回答

3

您正在分配和返回一行。您或者需要定义变量然后返回它,或者直接返回结果而不分配给变量。

return Object.keys(result) 
    .filter(key => result[key].last_res > 5) 
    .map(key => ({url: '/' + result[key].url_site + '/'})); 

这也是不是你所定义的变量urls您传入sm.createSitemap()功能明确。确保它存在于您定义的范围内var sitemap

你很可能缺少类似于下面的一行:

var urls = gotData(data); 
+0

如果我返回上面,我怎么能得到这行'urls:urls'的价值? –

+0

我怀疑这是相关的。当执行return语句时,在非严格模式下* urls *将被创建并赋值。该函数返回相同的值。在严格模式下,它会抛出一个引用错误(除非* urls *声明在某处未显示)。 – RobG

+0

@MoomooSoso看到我的补充。 – doublesharp