2016-08-11 9 views
0

私はmysql dbからデータを取得しています。私はejsファイルでレンダリングするためにデータを送信する必要があります。ejsノードでレンダリングするクエリデータを返しますjs

router.get('/', function(req, res, next) { 
    res.render('index', { speedAccelData: getSpeedAccelData() }); 
}); 

module.exports = router; 

以下は、データベースからデータを取得するために使用した関数です。それは正常にjsonStr必要なデータを印刷します。私は関数からjsonStrを返す必要があります。

var getSpeedAccelData = function() { 

    var jsonStr; 

    var con = mysql.createConnection({ 
    host: "localhost", 
    user: "root", 
    password: "root", 
    database: "db_name" 
    }); 

    con.connect(function(err){ 
    if(err){ 
     console.log('Error connecting to Db'); 
     return; 
    } 
    }); 

    con.query('SELECT * FROM table_name',function(err, result){ 
    if(err) throw err; 
    jsonStr = JSON.stringify(result) 
    console.log(jsonStr); 
    }); 
    con.end(); 

};

レンダリングするクエリデータを返すにはどうすればよいですか?

+0

それは非同期**です、あなたは次のように値を返すことはできません。 。 1つの解決策は、コールバックを 'getSpeedAccelData'関数に渡すことです。または、あなたの 'getSpeedAccelData'関数で' Promise'を返すことができます –

+0

[非同期呼び出しからの応答を返すにはどうすればいいですか?](http://stackoverflow.com/questions/14220321/how-do-i-非同期呼び出しからの返信) –

答えて

1

あなたはこの

var getSpeedAccelData = function() { 

    var promise = new Promise(function (resolve, reject) { 

    var jsonStr; 

    var con = mysql.createConnection({ 
     host: "localhost", 
     user: "root", 
     password: "root", 
     database: "db_name" 
    }); 

    con.connect(function(err){ 
     if(err){ 
     console.log('Error connecting to Db'); 
     reject(); 
     } 
    }); 

    con.query('SELECT * FROM table_name',function(err, result){ 
     if(err) { 
     reject(err); 
     } else { 
     jsonStr = JSON.stringify(result) 
     resolve(jsonStr); 
     } 

    }); 

    con.end(); 

    }); 

    return promise; 
}; 

は、その後、あなたのコントローラであなたはこのように進むことができます達成するためにPromiseを使用することができます**

router.get('/', function(req, res, next) { 
    getSpeedAccelData() 
    .then(function success(result) { 
    res.render('index', { speedAccelData: result }); 
    }, function error(error) { 
    ... 
    }); 
}); 
+0

なぜdownvoteですか?私は間違いを犯しましたか? –

関連する問題