[英]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.