【问题标题】:Get data on firebase database to replace string获取firebase数据库上的数据以替换字符串
【发布时间】:2017-05-03 11:37:25
【问题描述】:

当我运行这个函数从 firebase 数据库中获取数据时

app.listen(3000)
app.engine('html', require('ejs').renderFile)
var bodyParser = require('body-parser');
var sm = require('sitemap')

var firebase = require('firebase').initializeApp({
    apiKey: "xx",
    authDomain: "xx.firebaseapp.com",
    databaseURL: "https://xx.firebaseio.com",
    projectId: "xx",
    storageBucket: "xx.appspot.com",
    messagingSenderId: "xx"
  });

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){
    var url_sitemap = data.val();
    var keys = Object.keys(url_sitemap);
    console.log(keys);
}

结果是

[ 'key1', 'key2', 'key3', 'key4' ]

我需要在下面的“page-xx/”中添加数据

var sitemap = sm.createSitemap({ 
    hostname: 'xxx.com',
    urls: [
        { url: '/page-xx/},
        { url: '/page-xx/},
        { url: '/page-xx/},
        { url: '/page-xx/}
    ]
});

如何将 /page-xx/ 替换为数据库中的数据?

【问题讨论】:

    标签: javascript angularjs node.js firebase firebase-realtime-database


    【解决方案1】:

    类似这样的东西,使用ES6:

    const sitemap = sm.createSitemap({ 
        hostname: 'xxx.com',
        urls: gotData(data)
    });
    
    function gotData(data){
        const url_sitemap = data.val();
        const urls = [];
        Object.keys(url_sitemap)
              .forEach(k => urls.push({url: k }));
        return urls;
    }
    

    在非ES6:

    function gotData(data){
        var url_sitemap = data.val();
        var urls = [];
        var urlKeys = Object.keys(url_sitemap);
        for (var i = 0; i < urlKeys.length; i++) {
          urls.push({url: urlKeys[i] });
        }
        return urls;
    }
    
    var urls = gotData(/*-- your data -- */);
    
    var sitemap = sm.createSitemap({
        hostname: 'xxx.com',
        urls: urls
    });
    

    注意:如果您要进行异步调用以获取此数据,则可能需要将其包装在 Promisecallback 中。

    更新

    // store urls:
    var urls = [];    
    
    ref.on('value', gotData, errData);
    
    function errData(err){
        console.log('Error!');
        console.log(err);
    }
    
    function gotData(data){
        var url_sitemap = data.val();
        var urlKeys = Object.keys(url_sitemap);
        for (var i = 0; i < urlKeys.length; i++) {
          urls.push({url: urlKeys[i] });
        }
    }
    
    var sitemap = sm.createSitemap({
        hostname: 'xxx.com',
        urls: urls
    });
    

    【讨论】:

    • url: gotData(data) -&gt; SyntaxError: Unexpected token 这样的错误
    • 还是和url: gotData(data) -&gt; SyntaxError: Unexpected token一样的错误
    • sitemap调用中调用gotData时,需要定义数据。
    • @MoomooSoso 同样,ES6 语法可能是导致问题的原因。我会写一个非 ES6 的解决方案。
    • @MoomooSoso 非常欢迎,我已经更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多