2017-02-12 108 views
1

在我的app.js之前,等待創建mongodb連接,然後在應用程序啓動時創建一個mongodb連接。Nodejs:在創建http服務器

mongoose.connect(config.db, {}); 

var db = mongoose.connection; 
db.on('error', function() { 
    log.error("Failed to connect to database"); 
    process.exit(1); 
}); 
db.once('open', function() { 
    log.info("Connected to database"); 
}); 

app.jsbin/www.js(帶require('./../app')),在其中創建http服務器使用。

當前,如果db連接失敗,app終止,但在終止前已創建http服務器,因爲db創建失敗是異步報告的。

我需要阻止http服務器創建,直到數據庫連接成功,但我需要保持服務器創建代碼在bin/www.js本身,而不必將其移動到數據庫連接成功回調app.js

有什麼辦法可以做到這一點?

+1

將您的web服務器監聽器移動到db.once('open'....' – Saleem

回答

1

可以啓動僅當連接完成後您的服務器:

db.once('open', function() { 
    log.info('Connected to database'); 
    launchMyServer() 
}); 

,或者如果你想在另一個文件中使用它:

module.exports = function initConnection(callback) { 
    mongoose.connect(config.db, {}); 
    var db = mongoose.connection; 
    db.on('error', function (err) { 
    log.error('Failed to connect to database'); 
    process.exit(1); 
    }); 

    db.once('open', function() { 
    log.info("Connected to database"); 
    callback(); 
    }); 
}; 

從你www.js文件:

const initConnection = require('./../app') 

initConnection(function() { 
    launchMyServer() 
}) 
+0

)中如前所述,se rver的創建是在'bin/www.js'中完成的,'app.js'包含在它的db連接所在的地方。我想保持這種方式。 –

+0

您可以使用'module.exports ='導出函數 –

相關問題