アプリのシャットダウン時に MongoDB 接続を適切に閉じようとしています。コードは次のとおりです。
var express = require('express')
, http = require('http')
, mongoose = require('mongoose')
, path = require('path');
var app = express();
app.set('port', process.env.PORT || 3000);
mongoose.connect('mongodb://localhost/test');
// some post and get handlers etc. (removed for shorter output)
var server = app.listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
function cleanup () {
server.close(function () {
console.log("Closed out remaining connections.");
mongoose.connection.close();
process.exit();
});
setTimeout( function () {
console.error("Could not close connections in time, forcing shut down");
process.exit(1);
}, 30*1000);
}
process.on('SIGINT', cleanup);
process.on('SIGTERM', cleanup);
すべてが順調で、アプリを初めて起動したときに機能します。Ctrl-c
開始直後にヒットすると、Closed out remaining connections.
メッセージできれいにシャットダウンします。ただし、アプリがデータベースとやり取りしたり、静的ページを提供したりするとすぐに、その後シャットダウンしようとすると、次のエラーで終了します。
net.js:1225
throw new Error('Not running');
^
Error: Not running
at Server.close (net.js:1225:11)
at process.cleanup (<...>/app.js:77:12)
at process.EventEmitter.emit (events.js:92:17)
at Signal.wrap.onsignal (node.js:756:46)
22 Aug 15:15:28 - [nodemon] exiting
このエラーの原因と修正方法はありますか?