2013-06-27 45 views
0

我們使用的是node-mysql,我公開了mysql的createPool,其中從任何文件中我們都可以要求數據庫文件並獲得連接這樣如何確保connection.end()在從池中獲取數據庫連接時調用

var db = ("./database"); 

db(function(err, connection) { 
    //use connection to do stuff 
} 

我注意到,人們並不總是記得打電話connection.end(),將返回到池中的連接,然後我們打了極限..

我如何設計連接的收購這樣無論他們決定何時終止connection.end()被調用的回調函數?我無法想出一個辦法讓一個地方,我們可以做到這一點,所以開發人員只關心獲得連接..

回答

1

我不知道createPool從MySQL,但不能只是包裝它?

人們會提供一個function stuff(err, connection) { ... do whatever they want ... }。 爲什麼不採取該功能並創建save_stuff-功能?像

function save_stuff_creator(stuff) { 
    return function(err, connection) { stuff(err, connection); connection.end() } 
} 

東西,你也許想要一些try..catch圍繞stuff() -call。

如果你想connection留在某人一些其他的回調,你可以修改的功能類似stuff(connection, callback)和使用像async模塊和series -object。

但是我不知道如果要等待「用戶線程」的結束,如何執行最後的connection.end()調用:這實際上是問題。沒有這樣的線程,並且沒有辦法計算事件循環中的哪個事件來自誰。據我所知,事件循環沒有暴露給js-developer。

如果你不能信任你的被叫用戶,也許你可以把他的代碼在一個額外的子節點(見模塊cluster所以,你有一點控制的:當孩子完成你成爲通知

相關問題