Ответы пользователя по тегу Node.js
  • Как лучше всего писать синхронный код в Node (для последовательных запросов к БД)?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Да, сейчас есть синтаксический сахар в виде async/await. Об этом можно прочитать здесь и здесь
    ConstructorName.prototype.process = async () => {
      const connection = mysql.createConnection({
        host: "-",
        user: "-",
        password: "-",
        database: "-"
      });
      connection.connect();
    
      const operation = new Promise((resolve, reject) =>  {
        connection.query("SHOW TABLES", (err, results, fields) => {
          if (err) reject(err);
          results.some(item => (Object.values(item).indexOf('<tablename>') !== - 1)) 
          ? resolve('таблица в порядке')
          : reject(`Таблица с именем ${'name'} не обнаружена`);
        });
      });
    
      try {
        const result = await operation;
    
        const newOperation = new Promise(function (resolve, reject) {
          connection.query(`SHOW COLUMNS FROM  <tablename>`, (err, results, fields) => {
            if (err) reject(err);
            const tableFields = results.map(item => item["Field"]);
            ["<fieldname>", "<fieldname>", "<fieldname>", "<fieldname>"].every(item => tableFields.indexOf(item) !== -1)
            ? resolve('Поля в порядке')
            : reject(`поле с именем ${'<fieldname>'} не обнаружено`);
          })
        });
    
        await newOperation;
      } catch (error) {
        console.log(error);
      } finally {
        connection.end();
      }
    };
    Ответ написан
    1 комментарий
  • Как сделать выборку в MongoDB по времени?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Для начала вы должны вычислить текущее время минус 1 минуту
    const date = new Date();
    date.setMinutes(date.getMinutes() - 1);

    Теперь сделайте выборку по тем значениям, что меньше этого времени:
    TableName.find( { sent_at: { $lte: date } } )
    Ответ написан
    Комментировать
  • Как подключить несколько БД mongo в node.js?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Вы можете использовать mongoose. По итогу будет что-то такое:
    const mongoose = require('mongoose');
    
    const firstConnection = mongoose.createConnection('опции для подключения')
    const secondfirstConnection = mongoose.createConnection('опции для подключения')

    Больше о множественных подключениях можно прочитать тут
    Ответ написан
    Комментировать
  • Отправка фотографии с сайта на сервер. Как реализовать?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Воспользуйтесь этой библиотекой на стороне сервера, это самый простой и действенный вариант.
    По итогу будет что-то такое:
    const multer = require('multer');
    
    const store = multer.diskStorage({
      destination(req, file, cb) {
        cb(null, './src/public/images'); // ваша папка для файлов на сервере
      },
      filename(req, file, cb) {
        cb(null, Date.now() + '_' + file.originalname);
      },
    });
    
    const upload = multer({ storage: store }).single('file'); // загрузка одного файла
    const uploadMany = multer({ storage: store }).array('files'); // загрузка массива файлов
    
    router.put('/test', upload, (req, res, next) => {
     req.body.file // файл 
    });
    router.put('/test', uploadMany, (req, res, next) => {
     req.body.files // массив файлов
    });


    На клиенте воспользуйтесь form-data:
    const formdata = new FormData();
    formdata.append("file", fileInput.files[0], "/C:/file-path/file.png"); // если файл один 
    
    formdata.append("files", fileInput.files[0], "C:/file-path/file.png"); // если файлов много
    formdata.append("files", fileInput.files[0], "C:/file-path/file.png"); // если файлов много
    
    const requestOptions = {
      method: 'POST',
      body: formdata,
      redirect: 'follow'
    };
    
    fetch("url/test", requestOptions)
      .then(response => response.text())
      .then(result => console.log(result))
      .catch(error => console.log('error', error));
    Ответ написан
    1 комментарий
  • Как сгруппировать записи в MongoDB?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Самым лучшим вариантом будет использование агрегаций.

    Посмотрите работу команд: $group, $sum, $project, $lookup и $cond.

    Думаю, этого джентельменского набора более чем хватит для решения задачи
    Удачи)
    Ответ написан
    Комментировать