Не могу отдать значения из бд пользователю node.js

242
09 декабря 2017, 06:02

Я делаю:

let con = mysql.createConnection({
        host     : conf.get('db').connection,
        user     : conf.get('db').user,
        password : conf.get('db').pass, 
        database : conf.get('db').database
    });
    con.query('SELECT * FROM `clothing`', function(error, result, fields){
        if(error == null){
            var presets = [];
            result.forEach(function(v, i){
                presets.push({
                    'name': v.name,
                    'torso': [v.torso_draw, v.torso_tex],
                    'legs': [v.legs_draw, v.legs_tex],
                    'foot': [v.foot_draw, v.foot_tex],
                    'torso_acc': [v.torso_acc_draw, v.torso_acc_tex],
                    'hands': [v.hands_draw, v.hands_tex],
                    'helmet': [v.helmet_draw, v.helmet_tex],
                    'mask': [v.mask_draw, v.mask_tex]
                });
            });
            response.json(presets);
        } else{
            console.log(error);
        }
    });

И мне дает ошибку что headers уже отправлены, хотя если после con.query() отправить response.json() то такой ошибки не будет. Пробовал return presets, но он тогда пишет undefined, просто не возвращаются. Если сделал console.log() то значения есть в presets, но как их юзеру отправить??

Answer 1

Я бы вынес работу с базой данных в отдельную функцию (а в идеале в отдельный модуль).

Как то так

const doQuery = callback => {
  const connection = require('mysql').createConnection({
    host: conf.get('db').connection,
    user: conf.get('db').user,
    password: conf.get('db').pass,
    database: conf.get('db').database
  });
  const presets = [];
  connection.connect();
  connection.query('SELECT * FROM `clothing`', (err, results, fields) => {
    if (err) return callback(err, null);
    results.forEach((v, i) => {
      presets.push({
        'name': v.name,
        'torso': [v.torso_draw, v.torso_tex],
        'legs': [v.legs_draw, v.legs_tex],
        'foot': [v.foot_draw, v.foot_tex],
        'torso_acc': [v.torso_acc_draw, v.torso_acc_tex],
        'hands': [v.hands_draw, v.hands_tex],
        'helmet': [v.helmet_draw, v.helmet_tex],
        'mask': [v.mask_draw, v.mask_tex]
      });
    });
    connection.end();
    callback(null, presets);
  });
};
// вызов в app (в промышленном использовании следует добавить обработку ошибок)
doQuery((err, result) => response.json(presets));
READ ALSO
Таблица mysql.user верный формат

Таблица mysql.user верный формат

Вот так выглядит моя таблица mysqluser, у меня очень огромное ощущение что так быть не должно, при установке mysql и phpmyadmin оно само так сгенерировалось,...

229
Как получить время в формате dd.MM.yyyy hh:mm:00?

Как получить время в формате dd.MM.yyyy hh:mm:00?

Есть переменная типа DateTimeКак можно секунды изменить на 00?

199
KeyBinding в TreeView для элементов

KeyBinding в TreeView для элементов

Пытаюсь разобраться с привязкой "горячих" клавиш к деревуНе получается передать в качестве параметра к команде саму выбранную ветку дерева

275
Анимированные элементы в WPF C# приложении

Анимированные элементы в WPF C# приложении

С помощью каких библиотек можно реализовать что-то подобное?

241