2015-11-10 2 views
0

Так иметь файл с именем mobile.js, создать соединение с базой данных, с функцией, которая вызывает в запросе и возвращает набор мобильных телефонов:Получение результатов MySQL в файл маршрута

var mysql = require('mysql'); 
var pool = mysql.createPool({ 
    //database information 
}); 

module.exports = 
{ 
    getAllModels: function() 
    { 
     pool.getConnection(function(err, connection) 
     { 
      connection.query("SELECT model FROM product", function(err, res, fie) 
      { 
       if(err) throw err; 
       connection.release(); 
       //console.log(res); 
       return res; 
      }); 
     }); 
    } 
}; 

сейчас , раскомментировать код, указанный выше я получаю объект JSON [{model: 'LG'}, {model: 'Samsung'}, ...], но когда я пытаюсь достичь этой переменной в файле index.js маршрута через:

var express = require('express'); 
var router = express.Router(); 

var mobileRepo = require('../repositories/mobile'); 

router.get('/', function(req, res, next) { 
    var modeli = mobileRepo.getAllModels(); 
    console.log(modeli); 

    res.render('index'); 
}); 

module.exports = router; 

modeli переменная будет undefined.

Через моего текущего исследования, я знаю, что это происходит потому, что connection.query является резьбовой функцией асинхронной /, но то, что я не могу найти где-нибудь, и я пытаюсь выяснить, в том, как этого избежать?

В основном, как объединить маршрут и результат соединения, таким образом, позволяя переменной получить результат запроса?

Я также очень с удовольствием принимаю любые хорошие отзывы о теме или Node.js в целом, так как я в настоящее время это изучаю!

Спасибо за чтение!

EDIT: Я даже вижу, что результат запроса приходит после загрузки страницы, но я до сих пор не знаю, как заставить запрос ждать.

Tue, 10 Nov 2015 00:42:06 GMT expressnodejs:server Listening on port 3000 
undefined <--- this is calling the result from index.js 
GET/200 72.216 ms - 179 
[ { model: 'Samsung' }, { model: 'LG' } ] <--- calling result from mobile.js when query is done 

Одна вещь, которая пришла мне в голову, чтобы создать функцию результата:

module.exports = 
{ 
    getAllModels: function(outcome) 
    { 
     pool.getConnection(function(err, connection) 
     { 
      connection.query("SELECT model FROM product", function(err, res, fie) 
      { 
       //snip 
       outcome(res); 
}}}}; 

Но разве это не разорвать саму идею о том, почему Node.js так быстро, в первую очередь?

ответ

1

outcome - это именно то, что вам нужно, и это называется callback, и это правильный способ работы асинхронного кода.

Вам также понадобится изменить способ вызова функции.

mobileRepo.getAllModels(function(modeli){ 
    console.log(modeli); 
    res.render('index'); 
}); 
+0

Итак, я это ** **, что я должен делать .. Спасибо за поздний ответ! Я буду отмечать это как ответ. – NemanjaT

Смежные вопросы