Как прикрепить PostgreSQL таблиц / баз данных к электронной почте и отправить их получателю? - PullRequest
0 голосов
/ 15 января 2020

Мы с товарищами по группе создаем веб-приложение с Typescript / Javascript и будем хранить сгенерированные пользователем данные в PostgreSQL.

Я написал модуль Typescript для отправки обычных электронных писем cron .

const nodemailer = require("nodemailer");
const cron = require('node-cron');

const dotenv = require("dotenv");
dotenv.config({ path: '../.env' });

function buildDate() {
    let date = new Date();
    let year = date.getFullYear();
    let day = ("0" + date.getDay()).slice(-2);
    let month = ("0" + (date.getMonth() + 1)).slice(-2);

    return day + "/" + month + "/" + year;

}

cron.schedule("00 00 00 * * *", function () {
    const transporter = nodemailer.createTransport({
        host: 'smtp.gmail.com',
        port: '465',
        auth: {
            service: 'gmail',
            user: process.env.senderEmail,
            pass: process.env.senderPassword,
        }
    });

    const mailOptions = {
        from: process.env.senderEmail,
        to: 'fakename@gmail.com',
        subject: 'News letter - ' + buildDate(),
        html: '<h1> Todays topics include ..</h1>',
        text: 'hello world',
    }

    transporter.sendMail(mailOptions, function (error: string, info: any) {
        if (error) {
            console.log(error);
        } else {
            console.log("Email sent: " + info.response);
        }
    })

});

Мой вопрос: 1. Как автоматически сгенерировать таблицы / базы данных из PostgreSQL? 2. Как прикрепить таблицы / базу данных к электронному письму?

Формат может быть простым текстом, csv или pdf. Возьмите в качестве примера отчет о количестве зарегистрированных пользователей каждую неделю:

import * as Knex from "knex";

export async function up(knex: Knex): Promise<any> {
    return await knex.schema.createTableIfNotExists('users',(table)=>{
        table.increments();
        table.string('username').unique;
        table.string('email').unique;
        table.string('password');
        table.timestamps(false, true);
    })
}

export async function down(knex: Knex): Promise<any> {
    return await knex.schema.dropTableIfExists('users');
}

Благодарен, если вы можете помочь:)

1 Ответ

1 голос
/ 15 января 2020

Это странное требование, но лучший способ создать текстовое представление базы данных PostgreSQL или ее частей (например, одной таблицы) - вызвать исполняемый файл pg_dump с соответствующими аргументами.

Эта утилита генерирует сценарий SQL, который будет восстанавливать экспортированные части базы данных при передаче ее клиенту командной строки psql.

...