2017-04-25 64 views
1

這是我使用的是MSSQL此刻的方式,但它有時會錯誤:無法獲取節點MSSQL正常工作

的JavaScript:

router.get('/academiejaren', (req, res) => { 
    sql.connect(dbconfig, function (err) { 
     var request = new sql.Request(); 
     if (err) { 
      console.log(err); 
      return; 
     } 
     request.query("SELECT * FROM [Alg].[DefAJ];", function (err, recordset) { 
      if (err) { 
       console.log(err); 
       return; 
      } 
      else { 
       res.end(JSON.stringify(recordset)); 
      } 
     }); 
     request.query(); 
    }); 
}); 

錯誤:

{ ConnectionError: Connection is closed. 
    at C:\Users\Milan\Documents\Octopus\Octopus 2.0\node_modules\mssql\lib\main.js:1569:17 
    at _combinedTickCallback (internal/process/next_tick.js:73:7) 
    at process._tickCallback (internal/process/next_tick.js:104:9) 
    name: 'ConnectionError', 
    message: 'Connection is closed.', 
    code: 'ECONNCLOSED' } 
(node:556) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ConnectionError: Connection is closed. 
(node:556) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code. 

我使用的版本是3.2.0,因爲我無法獲得最新的4.0.2版本的工作...任何幫助或一些很好的示例,因爲我無法弄清楚文檔...

提前致謝!

編輯

更新於一個小的測試項目4.0.2。我得到它的工作。將我的API更改爲此更新。

router.get('/academiejaren', (req, res) => { 
    (async function() { 
     try { 
      let pool = await sql.connect(config) 
      let result1 = await pool.request() 
       .query('SELECT * FROM [Alg].[DefAJ];') 

      res.send(JSON.stringify(result1.recordset)); 


     } catch (err) { 
      res.send("CAUGHT ERROR academiejaren"); 
     } 
    })() 

    sql.on('error', err => { 
     // ... error handler 
    }) 
}); 

現在我還有一個小問題,應該如何處理catch和sql.on()?我應該如何處理錯誤?

回答

1
router.get('/academiejaren', (req, res) => { 
    sql.connect(dbconfig, function (err) { 
     var request = new sql.Request(); 
     if (err) { 
      console.log(err); 
      return; 
     } 
     request.query("SELECT * FROM [Alg].[DefAJ];", function (err, recordset) { 
      if (err) { 
       console.log(err); 
       return; 
      } 
      else { 
       res.send(JSON.stringify(recordset)); 
      } 
     }); 
     request.query(); 
    }); 
}); 

你從字面上沒有res.endend退出時,你想res.send

+0

噢上帝......布它有時有用嗎?我從api獲取了我的數據?它只是有時回饋這個錯誤? –

+0

你打開了連接。該部分沒有錯,如果你想知道更多關於res.end看這裏:http://stackoverflow.com/a/40326333/7707749 –

+0

哦,好的,謝謝!我有一個問題,如果我可以嗎?在每次數據處理/下載之後,我是否需要sql.close()? –

1

我去做不同的一點:

router.get('/', function(req, res, next) { 

    sql.connect(dbconfig).then(function() { 
      // Query 
      new sql.Request().query("Your query") 
       .then(function(recordset) { 
       //console.dir(recordset); 
       res.setHeader('Content-Type', 'application/json'); 
       res.send(recordset); 
       }).catch(function(err) { 
       // ... query error checks 
      }); 
     }); 
    }); 

現在,在您DBCONFIG確保你得到了它喜歡的: mssql://用戶名:密碼@ server/db

+0

是的,我發現了很多不同的方法。看看我要做的編輯,現在我正在使用異步函數。這就是我在文檔中找到的。 –