Почему ваш код не работает
Вы пытаетесь использовать DOM в среде Node.js.Node.js выполняет JavaScript на стороне сервера.Таким образом, нет переменных DOM (например, window
или document
), к которым вы можете получить доступ.Поэтому вы получаете сообщение об ошибке document is not defined
.
. Для получения дополнительной информации по этой теме вы, возможно, захотите проверить вопрос «Почему у Node.js нет встроенного DOM?»
Создание таблицы
Если вы хотите создать разметку таблицы HTML, вы можете использовать конкатенацию строк и просто объединить таблицу самостоятельно или использовать что-то вроде jsdom для имитации DOM на стороне сервера.
Поскольку ваш случай кажется довольно простым, я бы выбрал первый вариант.
Вот некоторый довольно простой код для создания HTMLразметка для таблицы.Вы можете поместить его в свой код вместо кода «создать таблицу», и он будет создавать таблицу с одним столбцом для каждого значения внутри col
.
function escapeHtml(str) { // for security reasons escape "<" (you could even improve this)
return str.replace(/</g, '<');
}
const htmlTable = '<table>'
+ `\n <tr>${col.map(c => '<th>' + escapeHtml(c) + '</th>')}</tr>`
+ results // generate rows, use map function to map values to trs/tds
.map(row => ('\n <tr>' +
col.map(c => `\n <td>${escapeHtml(row[c])}</td>`).join('')
+ '\n</tr>')).join('')
+ '\n</table>';
fs.writeFile('/data.html', htmlTable, (err) => {
// ...
});
Конечно, этот код довольно простпример для начала работы.
Отправка документа по почте
Вместо локального сохранения HTML-кода вы также можете напрямую отправить его по почте с помощью nodemailer.Вот пример кода, с которого можно начать, но вы можете зайти на сайт nodemailer для получения дополнительной информации.
await transporter.sendMail({
/* ... */
html: 'Full HTML document.... ' + htmlTable + ' ...'
});