2017-03-25 4 views
0

、私のルートでDBとの接続を確立するクエリを実行し、結果をキャプチャし、DOMにレンダリングする私のインデックスビューにそれがアクセスできるなぜDBクエリの結果を変数にプッシュしないのですか?

テント。

通報

はDBは、接続してコンソールの正常復帰をもたらします。しかし、この結果を "finalResult"配列にプッシュすることはできません。

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

router.get('/', function(req, res) { 

// Establish Connection with Database 
var mysql = require('mysql'); 
var connection = mysql.createConnection({ 
    host : '127.0.0.1', 
    user : 'root', 
    password : 'xxxxxxx', 
    database : 'my_db' 
}); 

connection.connect(); 

// // Query and post result to console 
connection.query('SELECT * FROM products', function(error, results, fields) { 
    if (error) throw error; 
    doSomething(results[0]); 
}); 

connection.end(); 


var finalResult = ['hello']; 

function doSomething(results) { 
    console.log(results.name); 
    finalResult.push(results.name); 
} 

console.log(finalResult); 


// Render/make accessible to views 
res.render('index', { 
    pageTitle: 'Home', 
    result: finalResult 
}); 
}); 

module.exports = router; 

doSomething(results[0]);console.log(results.name)が正しいクエリ結果を返すために成功doSomething()関数に結果をプッシュ。 console.log(finalResult)は "hello"とクエリ結果を加算する必要がある場合にのみ "hello"の配列を返しますので、finalResult.push(results.name)で問題が発生します。

答えて

0

新しいデータをfinalResult配列にプッシュした後、doSomething関数の内部にconsole.log(finalResult)を書き込もうとします。

doSomething関数が完了する前に(finalResult配列にデータを追加する前に)console.log(finalResult)が実行されるため、「helo」のみが表示されると思います。

+0

うん、それはうまくいきます。私はまだ混乱していますが、どうすればdoSomething()を最初に実行できますか?私はres.render関数に結果を渡すことができるようにしたい。 – lookininward

+0

res.render .....をconnection.query関数に、doSomething関数の直後に移動したり、res.rendeの関数を追加したり、doSomething関数の直後にこの関数を呼び出すことができます。 – Sari

関連する問題