2017-05-25 1034 views
3

此錯誤似乎在每個http請求中都會出現。我不完全確定它來自哪裏?UnhandledPromiseRejectionWarning:未處理的承諾拒絕(拒絕ID:22):ReferenceError:客戶端未定義

(node:39390) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 22): ReferenceError: client is not defined

有錯誤沒有行號,但這裏是的,這似乎代碼的樣本是造成它:

try { 
    var client = await pool.connect(); 
    await client.query(queryStatement, queryArgumentsArray); 
    res.sendStatus(200); 
} catch (e) { 
    console.log('Error adding updating subvendor availability data, UPDATE SQL query task', err); 
    res.sendStatus(500); 
} finally { 
    client && client.release && client.release(); 
} 

它首先我認爲這必須從我終於現身塊(也許client是超出範圍),但我說,如果聲明明確阻止試圖調用client.release,如果它不存在:

if (client) { client && client.release && client.release() }; 

我仍然得到這個錯誤,所以我覺得它一定是來自這些線。

var client = await pool.connect(); 
await client.query(queryStatement, queryArgumentsArray); 
res.sendStatus(200); 

我誤解了如何使用異步嗎?要清楚,代碼運行良好,http請求正在工作(正確響應請求),我的終端正在充斥着這些警告。

這裏是整個路線的簡化版本:

var express = require('express'); 
var router = express.Router(); 
var pool = require('../modules/pg-pool'); // brings in pg-pool created in another module 

// This route updates the availability for a user 
router.put('/updateAvailability', async (req, res) => { 
    var userId = req.decodedToken.userSQLId; 
    var subvendorId = req.headers.subvendor_id; 
    var availability = req.body; 

    var queryStatement = 'UPDATE status SET status=$3 WHERE userId=$2'; 
    var queryArgumentsArray = [availability.status, userId ]; 

    try { 
     var client = await pool.connect(); 
     await client.query(queryStatement, queryArgumentsArray); 
     res.sendStatus(200); 
    } catch (e) { 
     console.log('Error updating subvendor availability data, UPDATE SQL query task', err); 
     res.sendStatus(500); 
    } finally { 
     client && client.release && client.release(); 
    } 
}); 

module.exports = router; 
+0

是否有異常沒有行號? – Bergi

+0

該代碼看起來不錯。這是確切的,整個代碼?你是否在其他地方使用過「客戶端」(grep)? – Bergi

+0

@Bergi更正,沒有行號。我更新了完整的路線(我簡化了查詢,因爲它不是焦點)。來自這裏的任何線索? –

回答

1

所有信用這裏去briancnode-postgres誰我收到的建議之後,這可能是與該庫的問題在這裏回答我的問題的創造者(似乎不是這樣)。我只是需要創建try-catch

var client = await pool.connect() 
try { 
    await client.query(...) 
    res.sendStatus(200) 
} catch { ...} 
finally { 

} 

他完整的答案以外的客戶可以在這裏找到:https://github.com/brianc/node-postgres/issues/1301

相關問題