2017-10-31 15 views
0

私のログインフォームには、接続するデータベースを選択できるオプションがあります。そのため、その機能を作成しようとしています。Express js - データベース接続中のプロミス保留

db設定ファイルでは、という名前の関数があり、makeConnectionという別の関数に移動し、dbnameをパラメータとして送信し、この関数の結果を処理します。

問題は、2番目の関数は結果を返しませんが、promise pendingです。

この機能では、私はsetDB機能で処理されるエラーを意味しますが、これは機能しません。

var mssql = require('mssql'); 

module.exports = 
{ 
    setDB: (req, res) => 
    { 
    console.log('Prepare to connect to ' + req); 
    var result = makeConnection(req); 
    console.log(result); 

    if(result == 0) 
    { 
     res.send('Unknown database!'); 
    } 
    else if(result == 1) 
    { 
     res.send('Error trying to connect!') 
    } 
    else if(result == 2) 
    { 
     res.send('Connection done!') 
    } 
    //return connection; 
    } 
} 

function makeConnection(dbname) 
{ 
    console.log('Start connection....'); 

    return new Promise(function(resolve, reject) { 
    console.log('Database: '+ dbname); 
    var configs = { 
     Emp1: { 
      user: "us", 
      password: "pass", 
      server: "ip", 
      database: "Emp1" 
     }, 
     Emp2: { 
      user: "us", 
      password: "pass", 
      server: "ip", 
      database: "Emp2" 
     } 
    }; 

    var config = configs[dbname]; 
    if(config == undefined) 
    { 
     return 0; 
    } 

     var connection = new mssql.Connection(config); 
     connection.connect(function(err) 
     { 
     if (err) { 
      console.log(err); 
      reject(err); 
      return 1; 
     } else { 
      resolve(connection); 
      console.log('Database Connected!'); 
      return 2; 
     } 
     }); 
    }); 
} 

コンソールを印刷:

enter image description here

これを行うには良い方法は何ですか? 私は単一の接続を行い、各要求で接続をしたくない...そして、例えば、同時に2人の異なるデータベースで使用する準備をしなければならない。

これを行うより良い方法はどれですか?

+0

ただ、プールを使用 - > https://www.npmjs.com/package/mysql#pooling-connections – Keith

答えて

2

makeConnection()リターンの約束いただきありがとうございます。あなたが電話するときに自然にそうするでしょう:

var result = makeConnection(req); 
console.log(result); 

それは結果として未定の約束をします。それが何をすべきかです。あなたの関数は、非同期操作が返ったときに解決される保留中の約束を直ちに返します。しかし、あなたは結果を記録しようとする前にそれらを待っているわけではありません。あなたは、彼らは準備ができている場合の結果を得るために、約束のthen()機能を使用する必要があります。

makeConnection(req) 
.then(result => { 
    console.log(result); 

    if(result == 0) 
    { 
     res.send('Unknown database!'); 
    } 
    else if(result == 1) 
    { 
     res.send('Error trying to connect!') 
    } 
    else if(result == 2) 
    { 
    res.send('Connection done!') 
    } 
} 
関連する問題