Set notes
Проблема:
При передаче с бекенда на фронтенд Set - получаем пустой объект
Проблема в том, что когда вы отправляете sitemapsCollection и urlsCollection (которые являются объектами JavaScript типа Set) в ответе, они сериализуются в JSON. Однако, JavaScript’s JSON.stringify()
(который используется при отправке ответа) не может корректно сериализовать объекты типа Set - он преобразует их в пустые объекты {}
.
Проблема
Объекты Set преобразуются в пустые объекты при сериализации в JSON, потому что:
- Set не является нативным типом JSON
- Свойства объекта Set не являются перечисляемыми
- Только перечисляемые свойства сериализуются
Решение
Вам нужно преобразовать ваши объекты Set в массивы перед отправкой их в ответе:
// ...existing code...
console.log(`Length is ${sitemapsCollection?.size}`);
console.log(`Length is ${urlsCollection?.size}`);
console.log("sitemapsCollection", typeof sitemapsCollection);
if (!sitemapsCollection?.size && !urlsCollection?.size)
throw new Error("Can't parse sitemap");
// Преобразуем Set в массивы для JSON сериализации
const sitemapsArray = Array.from(sitemapsCollection);
const urlsArray = Array.from(urlsCollection);
return res.status(200).send({
sitemapsCollection: sitemapsArray,
urlsCollection: urlsArray
});
// ...existing code...
Альтернативный вариант, если хотите сохранить те же имена свойств:
return res.status(200).send({
sitemapsCollection: [...sitemapsCollection],
urlsCollection: [...urlsCollection]
});
Оба подхода дадут вам корректные массивы в вашем ответе, которые будут содержать все URL из ваших объектов Set.