Задать вопрос

Как вытащить данные из запроса к БД функцией connection.query в node.js (кроме conslole.log)?

Коллеги я не программист, но очень нужно для производственных нужд.
я понимаю, что есть похожий вопрос, но я не могу понять ответов в нём, да и вообще
понимание callback функций мне уже 4-й день не дается.

Подскажите мне использую node-webkit с установленным модулем mysql

в примере взял примерно такой код:

index.html
!DOCTYPE html>
<html>
  <head>
    <title>Hello World2!</title>
	   <script>
        
		
		function bodyOnLoad(){
           
		
			  misc=require('./mysql.js');
        	
        }
	
    </script>
  </head>
   <body onload="bodyOnLoad();"  >
  </body>
</html>


mysql.js
var mysql = require('mysql');
var connection = mysql.createConnection({
 database : 'techtrain',
   user     : 'root',
   password : ''
});


connection.connect();

connection.query('SELECT * FROM `answer` WHERE `question_id` = 2', function(err, rows, fields) {
  if (err) throw err;

  console.log('The solution is: ', rows[0].answer_name);
});

connection.end();


так вот при выполнении в node-webkit выдает нужный результат:
"The solution is: 1 раз в 1 год "

Проблема в том что я никак не могу вытащить эти данные в файл index.html
да и вообще никак не могу их вытащить из функции
connection.query('SELECT * FROM `answer` WHERE `question_id` = 2', function(err, rows, fields)

то есть внутри функции всё супер все данные доступны,
а вот при попытке вывести их в глобальную переменную,
или как-нибудь еще, чтобы видеть их дальше этой функции. а желательно так чтобы обратится к ним из головного файла index.html я не могу.
Уже, что только не рыл, но не понимаю механизм, а мне очень нужно как-то их обрабатывать.

Если кто-то мудрый и понимающий есть прошу помогите.
В тех примерах работы вывод в консоль, я просто не понимаю, как вывести в доступную переменную.
  • Вопрос задан
  • 11678 просмотров
Подписаться 6 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
w3d12b
@w3d12b
Вам нужно разобраться с механизмом экспорта результата функции изнутри во внешнюю среду.
1. Документация nodejs API "modules"
2. Пояснения на Хабре

А в html-файле вывести результат в нужный элемент из скрипта поможет DOM API innerHTML

mysql.js
var mysql = require('mysql');

var connection = mysql.createConnection({
  database : 'mysql',
   user     : 'root',
   password : 'toor'
});

var x={};

var query = function(){
  connection.connect();
  connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
    if (err) throw err;
    x = rows[0].solution;
  });
  connection.end();
};

var answer = function(){
  return x;
};

module.exports.query = query;
module.exports.answer = answer;


index.html
<!DOCTYPE html>
<html>
  <head>
    <title>Hello World2!</title>
 <script>
    var mysql = require('./mysql.js');
    function bodyOnLoad(){
      mysql.query();
    };

    function getAnswer(){
      document.getElementById("answer").innerHTML = mysql.answer();
    }
    </script>
  </head>
   <body onload="bodyOnLoad();">
   <div id="answer" onClick="getAnswer;">Click me</div>
  </body>
</html>


Но это одноразовый костыль. Чтобы работать с асинхронными коллбак-функциями,
вариант, предложенный Evansive, элегантнее и удобнее для дальнейшей разработки. И проще, если сесть и понять концепцию, а ваша настойчивость и целеустремленность весьма впечатляют.
На хабре есть материалы, если с английским сложно.
Ответ написан
BosonBeard
@BosonBeard Автор вопроса
Коллеги но хоть кто-то может дать явный ответ как мне в этом примере вытащить и обработать ключ
"rows[0].answer_name" чем либо кроме console.log? уже 5- день впустую трачу время
Ответ написан
Комментировать
@green_turtle
Почитайте подробнее про замыкания и фунциии обратного вызова (closure, callback)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы