Как сделать так, чтобы этот код сохранил в таблицу pdf-файл (Node.js)?

Ссылка скопирована
2 ответов

Этот код выводит 'true', однако в базе данных NULL. Колонка в бд - binary. Думаю, проблема может быть в том, что предварительно ещё нужно перевести файл в бинарное представление.. если так, подскажите какой-нибудь способ или пакет, пожалуйста

app.post('/users/pdf', function(req, res, next) {     if (!req.body) return res.sendStatus(400)     const email = req.body.email     for_pdf.get_by_email(         email,         (err, users) => {             if(err) return next(err)             const doc = new jsPDF()             for_pdf.add_pdf(                 email,                 doc.text(JSON.stringify(users), 10, 10),                 (err) => {                     if(err) return next(err)                     res.format({                         json: () => {                             res.send('true')                         }                     })                 }             )         }     ) })

app.post('/users/pdf', function(req, res, next) { if (!req.body) return res.sendStatus(400) const email = req.body.email for_pdf.get_by_email( email, (err, users) => { if(err) return next(err) const doc = new jsPDF() for_pdf.add_pdf( email, doc.text(JSON.stringify(users), 10, 10), (err) => { if(err) return next(err) res.format({ json: () => { res.send('true') } }) } ) } ) })

Методы класса:

class For_pdf {     static get_by_email(email, cb) {         if(!email) return cb(new Error('Please provide an email'))         db.get(`SELECT email, firstName, lastName, image FROM users WHERE email = ?`, email, cb)     }      static add_pdf(email, data, cb) {         if(!email) return cb(new Error('Please provide an email'))         const sql_pdf = `UPDATE users SET pdf = ? WHERE email = ?`         db.run(sql_pdf, data.pdf, email, cb)     } }

class For_pdf { static get_by_email(email, cb) { if(!email) return cb(new Error('Please provide an email')) db.get(`SELECT email, firstName, lastName, image FROM users WHERE email = ?`, email, cb) } static add_pdf(email, data, cb) { if(!email) return cb(new Error('Please provide an email')) const sql_pdf = `UPDATE users SET pdf = ? WHERE email = ?` db.run(sql_pdf, data.pdf, email, cb) } }

Дополнительно:

Вообще, хранить в базе файлы - в большинстве случаев, не самая лучшая затея. Лучше хранить в поле путь до файла на сервере.
Касательно именно темы вопроса. Не знаком с нодой, но навскидку:

  • Не вижу, где выполняется коммит.
  • Нет проверки "не выдал ли запрос к базе ошибку (собственно может это запрос падает)".
  • Александр Нестеров, по заданию нужно чтобы pdf в binary хранился.
    Запрос работает исправно, т.к. я его уже исправлял и у меня sql-ошибки прерывают работу сервера. Про коммит не очень понял. Спасибо, что обратили внимание на вопрос
  • Открываешь документацию jsPDF и читаешь. Открываешь документацию твоей библиотеки для работы с db и читаешь. 99% все нужные методы есть из коробки. Изучать документацию за вас мне сегодня лень.
  • AJIEKC_10, Вообще, чтобы данные сохранились в базе нужно выполнять коммит по завершению запросов.
    В модулях для python, с которым я работаю, это, обычно, нужно делать вручную:
    connection.commint() # connection - класс подключения к базе.

    connection.commint() # connection - класс подключения к базе.

    Может:
    db.run(sql_pdf, data.pdf, email, cb)
    DB/run автоматически выполняет коммит, но тут я без понятия.

  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Павел Админов Ответ

    Для сохранения данных в формате PDF в Node.js, вам потребуется использовать стороннюю библиотеку, такую как `pdfkit`. Эта библиотека позволяет создавать PDF-файлы на лету.

    Вот пример кода, который поможет вам сохранить данные в таблицу PDF-файл:

    const PDFDocument = require('pdfkit');
    const fs = require('fs');
     
    const data = [
      { name: 'John Doe', age: 30 },
      { name: 'Jane Smith', age: 25 },
      { name: 'Bob Johnson', age: 40 }
    ];
     
    const doc = new PDFDocument();
    doc.pipe(fs.createWriteStream('output.pdf'));
     
    doc.fontSize(12);
    doc.text('Name\tAge', { bold: true });
     
    data.forEach((row) => {
      doc.text(`${row.name}\t${row.age}`);
    });
     
    doc.end();
    console.log('PDF created successfully');

    const PDFDocument = require('pdfkit'); const fs = require('fs'); const data = [ { name: 'John Doe', age: 30 }, { name: 'Jane Smith', age: 25 }, { name: 'Bob Johnson', age: 40 } ]; const doc = new PDFDocument(); doc.pipe(fs.createWriteStream('output.pdf')); doc.fontSize(12); doc.text('Name\tAge', { bold: true }); data.forEach((row) => { doc.text(`${row.name}\t${row.age}`); }); doc.end(); console.log('PDF created successfully');

    В этом коде мы используем библиотеку `pdfkit`, чтобы создать новый PDF-документ. Затем мы добавляем данные в таблицу, используя метод `text` для каждой строки данных. Наконец, мы завершаем создание документа и сохраняем его в файл `output.pdf`.

    Не забудьте установить библиотеку `pdfkit`, выполнив команду `npm install pdfkit` перед запуском этого кода.

    Теперь у вас должен быть PDF-файл с данными в таблице. Надеюсь, это поможет вам решить вашу проблему!

    Другие ответы (1) Ответить на вопрос
    Виктор Sys

    Для сохранения данных в таблицу PDF-файл в Node.js можно воспользоваться библиотекой `pdfkit`. Ниже приведен пример кода, который демонстрирует, как создать PDF-файл с таблицей данных:

    ```php
    const PDFDocument = require('pdfkit');
    const fs = require('fs');

    // Создаем новый PDF-документ
    const doc = new PDFDocument();
    doc.pipe(fs.createWriteStream('output.pdf'));

    // Добавляем таблицу с данными
    const table = [
    ['Имя', 'Возраст', 'Email'],
    ['John Doe', 30, 'john.doe@example.com'],
    ['Jane Smith', 25, 'jane.smith@example.com'],
    ['Bob Johnson', 40, 'bob.johnson@example.com']
    ];

    doc.font('Helvetica-Bold');
    doc.fontSize(12);
    doc.text('Список пользователей', { align: 'center' });
    doc.moveDown();

    doc.font('Helvetica');
    doc.fontSize(10);
    table.forEach(row => {
    row.forEach(cell => {
    doc.cell(200, 20, cell, { border: true });
    });
    doc.moveDown();
    });

    // Завершаем создание PDF-файла
    doc.end();

    console.log('PDF-файл успешно создан');
    ```

    Этот код создаст PDF-файл с таблицей данных о пользователях. Вы можете настроить содержимое таблицы и стиль отображения данных в соответствии с вашими потребностями. Не забудьте установить библиотеку `pdfkit` перед запуском этого кода, используя команду `npm install pdfkit`.

    Надеюсь, это поможет вам сохранить данные в таблицу PDF-файл в Node.js. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать!

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно