Как использовать обещание в пакете npm sitemap? - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь использовать v5.1.0 из npm sitemap пакета для создания индекса карты сайта.

У меня уже есть этот рабочий код, который просто создает карту сайта:

const { createSitemap } = require('sitemap')
function getSitemap(hostname, urls) {
    const s = createSitemap({
        hostname, urls,
        cacheTime: config.SITEMAP_CACHE_TIME_SECS * 1000,
    });
    return s.toXML(function(err, xml) {
        if (err) return reject(err);
        resolve(xml);
    });
}
exports.routes = function(app) {
    app.get("/sitemap.xml", function(req, res) {
        Promise.all([
            entity.Template.allPublicShowcaseURLs(),
            entity.User.allPublicShowcaseURLs(),
        ]).then(([showcase_urls, profile_urls]) => {
            return getSitemap(config.URL, showcase_urls.concat(profile_urls));
        })
        .then(serveXML(res))
        .catch(utils.fail(req, res));
    });
};

Теперь я пытаюсь изменить его для создания индекса карты сайта, следуя документации (что на самом деле не очень понятно).

Это то, что я пытаюсь вместо этого:

const { createSitemapsAndIndex } = require('sitemap')
function getSitemap(hostname, urls) {
    const smi = createSitemapsAndIndex({
        hostname, urls,
        cacheTime: config.SITEMAP_CACHE_TIME_SECS * 1000,
        targetFolder: require('os').tmpdir()
    });
    console.log('smi', smi)
    return smi.toXML(function(err, xml) {
        if (err) return reject(err);
        resolve(xml);
    });
}

Но это не так с smi.toXML is not a function. Консоль показывает, что smi является Promise { <pending> } в этой точке. Я думаю, что, возможно, эта функция возвращает Promise, потому что она хочет что-то записать в файловую систему (?). Я пытался прочесть источник , но не могу его понять.

Полагаю, мне нужно решить Обещание, получить все, что он возвращает, и затем превратить это в XML - но как?

...