В моем проекте у меня есть массив объектов, который отправляется функции для создания CSV-файла из этого массива объектов.
Этот CSV-файл настроен на то, чтобы содержать каждый из объектов из массива в одном файле, а затем используется как вложение в параметрах почты.
Теперь моя цель - создать вложение CSV из каждого объекта в массиве, а не только из одного файла, включающего все объекты.
Мой массив объектов выглядит так
let products = [{product: 'product-184', id: 184, description: 'description for product-184'}, {product: 'product-192', id: 192, description: 'description for product-192'}, {product: 'product-122', id: 122, description: 'description for product-122'}]
Это функция, которая отправляет массив в функцию generateCSVText (), а затем добавляет его к прикрепленным файлам.
index.sendMail = (data) => {
//filter out empty products
const products = data.filter(item => {
return item.product !== null
});
let emailOptions = {},
csvText = generateCSVText(products);
//this function is being used to generate the text for the CSV file, it currently sends the entire array as a parameter, which is not the goal anymore
try {
emailOptions = {
// adds attachments
attachments: [
// the goal is to create a CSV attachement from every object in the array of objects
{
filename: `${moment().format('YYYYMMDDHHmmss')}.csv`,
content: csvText
},
],
subject: subject,
from: sendMailFrom,
text:
'attachements for products',
to: sendMailTo
};
} catch (e) {
return Promise.reject(e);
}
return send(emailOptions); //send mail
};
}
Это - это функция generateCSVText, я не уверен, насколько она актуальна для решения, но я все равно решил поделиться ею
const _ = require('lodash');
module.exports = data => {
let header = '';
let rows = [];
let inletsCount = 0;
let uselessHeader = false;
if (!_.isArray(data)) {
data = [data];
}
data.forEach(configuration => {
uselessHeader = true;
let tmpHeader = _.flatten(_.map(configuration, (value, key) => {
if (_.isArray(value)) {
return _.map(value, (_, index) => {
return key + ' ' + (index + 1)
})
}
return key;
})).join(';');
if (!uselessHeader) {
header = tmpHeader;
}
rows.push(
_.flatten(_.map(configuration, value => {
if (_.isArray(value)) {
return _.map(value, element => {
return _.map(element, (v, k) => {
return k + ':' + v
}).join(' ,');
})
}
return value;
})).join(';')
);
});
return [header, rows.join('\n')].join('\n');
};
Окончательный вывод CSV выглядит так: введите описание изображения здесь
Итак, как я могу вернуть одно вложение для каждого объекта, как вы порекомендуете подходить к этому? Я благодарен за любой вклад!