我觉得我愚蠢,这很简单。我试图创建一个类似于以下内容的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个网址:
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()
]
});
这不起作用。一切返回的离子photoURL都会被忽略,但我不确定如何修改返回
修改
如果我在console.log({url: '/photo/' + obj.img_id, changefreq: 'weekly', priority: 0.8, lastmodrealtime: true },)
命令之后直接放siteMapArray.push
,我会得到如下输出,我认为这是我之后的事。
{ 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 },
答案 0 :(得分:0)
我意识到我的问题是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);
});
});
};