簡體   English   中英

Javascript從數據庫記錄自動生成列表

[英]Javascript auto-generate list from database records

我覺得我很傻,這真的很簡單。 我正在嘗試創建一個類似於以下內容的Javascript列表:

var sitemap = sm.createSitemap({
    hostname: hostname,
    cacheTime: 600000,  //600 sec (10 min) cache purge period 
    urls: [
        { url: '/' , changefreq: 'weekly', priority: 0.8, lastmodrealtime: true, lastmodfile: 'views/home.hbs' },
        { url: 'photo/image_id1', changefreq: 'weekly', priority: 0.8, lastmodrealtime: true},
        { url: 'photo/image_id2', changefreq: 'weekly', priority: 0.8, lastmodrealtime: true},
        { url: 'photo/image_id3', changefreq: 'weekly', priority: 0.8, lastmodrealtime: true}
        ...
    ]
});

為了自動生成底部3個URL,我使用以下代碼:

function photoURLs() {
    var siteMapArray = new Array();
    db.sequelize.query(photoQuery, {
        replacements: queryParams
    }).spread(function(makeSiteMap) {

        //console.log(makeSiteMap);

        makeSiteMap.forEach(function(obj) {
            siteMapArray.push({
                url: '/photo/' + obj.img_id,
                changefreq: 'weekly',
                priority: 0.8,
                lastmodrealtime: true
            }, );
        });

        //console.log (siteMapArray);
    })
    return siteMapArray
}

var sitemap = sm.createSitemap({
    hostname: hostname,
    cacheTime: 600000, //600 sec (10 min) cache purge period 
    urls: [{
            url: '/',
            changefreq: 'weekly',
            priority: 0.8,
            lastmodrealtime: true,
            lastmodfile: 'views/home.hbs'
        },
        photoURLs()
    ]
});

這不起作用。 所有返回的ion photoURLs都會被忽略,但是我不確定如何修改返回值

編輯

如果我在siteMapArray.push命令之后直接放置console.log({url: '/photo/' + obj.img_id, changefreq: 'weekly', priority: 0.8, lastmodrealtime: true },)之后,我將得到如下輸出,我想這就是我的追求。

  { url: '/photo/354F5745AF',
    changefreq: 'weekly',
    priority: 0.8,
    lastmodrealtime: true },
  { url: '/photo/8CC02E33C0',
    changefreq: 'weekly',
    priority: 0.8,
    lastmodrealtime: true },
  { url: '/photo/ED243618FA',
    changefreq: 'weekly',
    priority: 0.8,
    lastmodrealtime: true },

我意識到我的問題是Promise尚未解決,因此我將代碼重寫如下。 我確定這不是最好的代碼,但它可以工作。 (有關標簽的內容是新的)。

function createSiteMap(myURLs, tagURLs) {
    var sitemap = sm.createSitemap({
        hostname: hostname,
        cacheTime: 600000,  //600 sec (10 min) cache purge period 
        urls: myURLs
        });
    fs.writeFileSync("public/sitemap.xml", sitemap.toString());    
    process.exit();
}

function uniq(a) {
    var seen = {};
    return a.filter(function(item) {
        return seen.hasOwnProperty(item) ? false : (seen[item] = true);
    });
}

function getPhotos() {
    return new Promise(function(resolve, reject) {
        var siteMapArray = new Array()
        var tags = new Array()
        siteMapArray.push ({ url: '/' , changefreq: 'weekly', priority: 0.8, lastmodrealtime: true, lastmodfile: 'views/home.hbs' },)
        db.sequelize.query(photoQuery, {
            replacements: queryParams
        }).spread(function(makeSiteMap) {
            makeSiteMap.forEach(function(obj) {
                var siteLink = { url: '/photo/' + obj.img_id, changefreq: 'weekly', priority: 0.6, lastmodrealtime: true }
                siteMapArray.push(siteLink);
                obj.tags = obj.tags.split(',').map(function(e) {
                    return e.trim();
                });
                for (var tag in obj.tags) {
                    tags.push(obj.tags[tag])
                }
            });

            resolve (siteMapArray);

            var uniqueTags = uniq(tags);
            for (var tag in uniqueTags) {
                var siteLink = { url: '/search/' + uniqueTags[tag], changefreq: 'weekly', priority: 0.8, lastmodrealtime: true }
                siteMapArray.push (siteLink);
            }

            createSiteMap(siteMapArray);

        });
    });
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM