2017-09-05 23 views
0

使用NodeJS中的MSSQL驅動程序並嘗試使用池來保持與數據庫的連接清潔,並避免出現連接無法正確關閉的問題。現在,我正在從標準調用轉移到池,我得到了一個奇怪的錯誤。NodeJS MSSQL驅動程序無法讀取使用池未定義的屬性'.then'

我的快遞航線上的代碼如下:

app.get('/records/pending/:id', (req, res) => { 
    try{ 
     dbq.getOnePending(req.params.id).then((set) => { 
      res.send(set); 
     }); 
    }catch(err) { 
     console.error(err); 
     res.send(err); 
    } 
}); 

這是很好的使用標準連接到這個樣子的DB:

dbq.getOnePending = (id) => { 
    return mssql.connect(sqlConfig).then(() => { 
     return new mssql.Request().query(` <<query>> `) 
       .then((set) => { 
        mssql.close(); 
        return set; 
       }).catch((err) => { 
        console.error(err); 
        mssql.close(); 
       }); 
     }); 
} 

現在,我已經感動到連接池模型,並且我不能在快速代碼中使用.then()。我得到這個錯誤:

TypeError: Cannot read property 'then' of undefined

查詢的池版本是這樣的:

getOnePending: (id) => { 
    sweepPool.request().query(`<<query>> `, (err, res) => { 
     if(err){ 
     console.error(err); 
     return err; 
     }else{ 
     return res; 
     } 
    }); 
    }, 

我應該如何去訪問資源對象,如果我不能用then()

回答

0

而不是使用標準接口進入連接池,我使用流暢的接口允許.then().catch()

連接池請求函數的標準形式是這樣的:

ConnectionPool.request().query(<<query>>, callback(error, response));

允許我使用的情況下,我想站起來,並用類似的代碼運行於標準的連接,我用以下面的功能爲起點。

實例查詢功能

getAllPending =() => { 
    return sweepPool.request().query(`<<query>>`).then((set) => { 
        console.log(set); 
        return set; 
        }).catch((err) => { 
         console.error(err); 
         return err; 
        }); 
} 

電話查詢功能

app.get('/records/pending', (req, res) => { 
     try{ 
      dbq.getAllPending().then((set) => { 
       res.send(set); 
      }); 
     }catch(err){ 
      console.error(err); 
      res.send(err); 
     } 
}); 

當然,這實際上並不處理錯誤,但它是一個很好的起點。

相關問題