2016-04-12 15 views
0

私のプロジェクトでmssqlノードモジュールを使用していますが、非同期呼び出しを行っていない頃はすべてが良いです。mssqlノードモジュールの接続エラー

複数の非同期呼び出しで、「接続が閉じています」という接続エラーが表示されます。 誰かがコードを調べて助けてくれますか?真、plusplus:真、develの

==== SqlServerDAL.jsこの

var sql = require('mssql'); 
var _sqlConfig = require("../../../../config/dbconfig.json"); 

function SqlServerDAL() { 
    this._sqlConfig = _sqlConfig; 
    this._sqlConnection = null; 
} 

/** 
* @param : request > request or query parmanter to excute sql query 
* @param : callback > after execution neect to send response back to serr 
* @param : sqlReqConf > to build the requst object from the configuration 
*/ 
SqlServerDAL.prototype.executeRequest = function (request, callback) { 

    var self = this; 

    self._sqlConnection = new sql.Connection(this._sqlConfig); 

    this._sqlConnection.connect().then(function() { 

     var _sqlRequest = new sql.Request(self._sqlConnection); 

     try { 
      _sqlRequest.input('someVar','someValue') 

      _sqlRequest.execute('myStoreProc').then(function (recordsets) { 
       callback(null, recordsets); 
      }).catch(function (sqlEx) { 
       callback({ 
        code: "ERR0003", 
        message: sqlEx.message, 
        type: sqlEx.name 
       }, null); 
      }); 
     } catch (sqlEx) { 
      callback({ 
       code: "ERR0004", 
       message: sqlEx.message, 
       type: sqlEx.name 
      }, null); 
     } 

    }).catch(function (sqlEx) { 
     callback({ 
      code: "ERR0001", 
      message: sqlEx.message, 
      type: sqlEx.name 
     }, null); 
    }); 
}; 

module.exports = new SqlServerDAL(); 

私は

/* jslintはvarsのdal.jsから呼び出しています。この上記のファイルのようないくつかのものです:真、nomen:trueの場合、インデント:4、maxerr:50 */ /*グローバル必要、モジュール、ロガー*/

var Q = require("q"); 
    var sqlServerDAL = require('./sqlDAL/sqlServerDAL'); 

    /** 
    * 
    * @constructor: 
    */ 

    function DAL() {} 

    /** 
    * @param : customRequst : this json object will come from respective dbschema files, 
    *      This object bening used to build sqlRequest object 
    */ 

    DAL.prototype.executeRequest = function (customRequest) { 

     var deferred = Q.defer(); 

     sqlServerDAL.executeRequest(customRequst, function (sqlEx, recordsets) { 

      if (recordsets) { 
       logger.info("_sqlRequest is successfully executed:" + JSON.stringify(recordsets)); 
       deferred.resolve(recordsets); 
      } else if (sqlEx) { 
       deferred.reject({ 
        code: sqlEx.code, 
        message: sqlEx.message, 
        type: sqlEx.name 
       }); 
      } 
     }); 

     return deferred.promise; 
    }; 


    module.exports = new DAL(); 

//私のコントローラは

のようなものです0
app.use("mycontroller", function(req, res, next){ 
var dal = new Dal(); 
dal.executRequest(function(result){ 
    res.send(result) 
} , function(err){ 
    console.log("got some error" + errr) 
}) 
    }) 
+0

私はjson configで同じ問題がありました。試してみたレガシー接続文字列。 'mssql:// $ {cfg.db.user}:$ {cfg.db.password} @ $ {cfg.db.server}/SQLEXPRESS/$ {cfg.db.database}' –

+0

申し訳ありません!不運 –

答えて

0

はい私は答えを得ました。非同期呼び出しのために新しいリクエスト(self.connection)が古い関数呼び出しによって閉じられている古いオブジェクトを取得しています。答えはこのように新しいリクエストを作成する必要があります。

this._sqlConnection.connect().then(function (connection) { 
    var _sqlRequest = new sql.Request(connection); 
}) 
関連する問題