2017-07-01 8 views
1

ノードjsのデータベース値を返し、ejsファイルの変数として渡したい。ノードJsコールバック関数を返す

ベローは私が使用したコードです。 値を返しませんでした。

function getExternalLocation(cb) { 

    mssql.connect(msSqlSettings, function (err) { 
     if (err) { 
      cb(err); 
     }  
     var getQuery = "SELECT [Title] FROM [dbo].[StyleTemplates] " ; 
     //console.log(getQuery); 
     var request = new mssql.Request();   
     // query to the database and get the data 

     request.query(getQuery, function (err, rows) { 
      mssql.close(); 
      cb(err, rows);   
     }); 
    }); 
} 

exports.eejsBlock_editbarMenuLeft = function (hook_name, args, cb) { 
    var userData = getExternalLocation(args, function(err, rows) {}); 
    args.content = args.content + eejs.require(
     'ep_resources/templates/editbarButtons.ejs', { 
     userData: userData 
    }); 
    return cb(); 
}) 

userDataは、任意の値を返しませんでした。

+1

可能な重複https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an -asynchronous-call) –

+0

コールバックを使用していない場合は、なぜ実装しますか?小さなヒント*行*にはあなたが欲しいものが含まれています –

+0

基本的に、 "行"変数に格納されているすべての値をデータベースに戻したいとします。可能な場合は、サンプルコードを教えてもらえますか?** – Sushil

答えて

1
var userData = getExternalLocation(args, function(err, rows) {}); 

私はuserDataが非同期関数で正しいデータを取得するとは思わないが、コールバックでデータを取得しようとすることはできません。

getExternalLocation(args, function(err, rows) { 
    var userData = rows; 
    args.content = args.content + eejs.require(
    'ep_resources/templates/editbarButtons.ejs', { 
    userData: userData 
    }); 
}); 
[私は非同期呼び出しからの応答を返すにはどうしますか?](の
+0

可能であれば、サンプルコードを教えてもらえますか? – Sushil

+0

答えはコールバックを使用するサンプルコードです。async/awaitを使用する場合は、promiseとasyncについてES6 APIを読む必要があります。 – Borkes

関連する問題