• Как заставить Node.Js дождаться выполнения MySQL?

    ebanytiu_lis
    @ebanytiu_lis Автор вопроса
    Сережа Ахен:
    Мне ваш кейс работы с бд не понятен от слова совсем.

    Имеете ввиду, не понятен на PHP?
    Опишу на русском:
    функция получает на вход два параметра >id, >get (дааа, я только сейчас допёр, что мне нужен ещё один параметр)
    1) открывается подключение
    2) выполняется запрос (как раз таки, Ваш запрос тут и подойдёт)
    SELECT * FROM test WHERE id = >id
    3) запрос возвращает массив
    4) берём из массива нужный нам столбец (>get)

    а ещё я чиркнул вам в вк...
  • Как заставить Node.Js дождаться выполнения MySQL?

    ebanytiu_lis
    @ebanytiu_lis Автор вопроса
    Сережа Ахен: тэкс...
    Извините, если сильно напрягаю)))
    Получается должно быть так:
    best_function_from_serega.js
    var pool = require('mysql').createPool({
        host: 'localhost',
        user: 'user',
        password: 'pass',
        database: 'dbname',
        connectionLimit: 100
    });
    exports.query = function (sql, props) {
        return new Promise(function (resolve, reject) {
            pool.getConnection(function (err, connection) {
                connection.query(
                    sql, props,
                    function (err, res) {
                        if (err) reject(err);
                        else resolve(res);
                    }
                );
                connection.release();
            });
        });
    };

    my_mega_strange_and_hard_script.js
    var query = require('./mysql').query; //Это же подключение и "best_function_from_serega.js", правильно?
    
    query('SELECT * FROM test WHERE id = ?', [5]).then(function (res) { //Откуда 5?))))
    //Замечательно! Работаем с полученными данными.
    //Вы выводите данные по ключу, не вопрос! 
    
    switch($var){
      case 0:
        console.log(res[0].a);
        break;
      case 1:
        console.log(res[0].jdsl);
        break;
      case 2:
        console.log(res[0].hzhz);
        break;
    }
    
    }).catch(function (err) {
      console.log('AHTUNG!!! OPASNOST!!!');
      console.log(err);
    });
  • Как заставить Node.Js дождаться выполнения MySQL?

    ebanytiu_lis
    @ebanytiu_lis Автор вопроса
    Сережа Ахен: вот, например, как я вижу код на PHP:
    //Создаём функцию
    function sql_get($get){
      $link = mysqli_connect('localhost', 'root', '', '1047750');
      $query = "SELECT * FROM test";
      $row = mysqli_fetch_array(mysqli_query($link, $query), MYSQLI_ASSOC);
      if ($row){
        return($row[$get]);
      }
    switch($var){
      case 0:
        echo (sql_get("a"));
        break;
      case 1:
        echo (sql_get("jdsl"));
        break;
      case 56:
        echo (sql_get("hzhz"));
        break;
    }
    }


    Представить страшно, какой большой получится код, если 1 сточку (sql_get()) заменить на 9 Ваших...
    Но если другого решения нет...
  • Как заставить Node.Js дождаться выполнения MySQL?

    ebanytiu_lis
    @ebanytiu_lis Автор вопроса
    Сережа Ахен: Совсем не в ту сторону...
    Вот смотрите:
    Я только что с PHP пришёл, поэтому всё понимать немножко трудно.
    Алгоритм такой (назову его блоком):
    1. Отправляем запрос
    2. Получаем ответ
    3. Выводим его

    Я хотел выделить отправление и получение в функцию, чтобы это занимало меньше места (изначально в функции должен быть аргумент - столбец, значение которого нам нужно)... На PHP это бы прекрасно работало, но здесь либо я тупой (а это именно так), либо я тупой (и это точно).

    Ваш вариант подходит. Но он подходит если блоков мало. А если у меня будет их десять?
    Работать-то оно конечно будет, но код получится громоздкий...
    Отсюда и мои тщетные попытки заставить node сначала дождаться ответа, а потом вывести его...
  • Как заставить Node.Js дождаться выполнения MySQL?

    ebanytiu_lis
    @ebanytiu_lis Автор вопроса
    Я так и хотел сначала, но так кода будет в несколько раз больше...
  • Как заставить Node.Js дождаться выполнения MySQL?

    ebanytiu_lis
    @ebanytiu_lis Автор вопроса
    Я хотел написать бота для телеграмма... И думал, смогу выделить запрос к базе данных в отдельную функцию, что бы кода поменьше было...