2017-05-04 77 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