【发布时间】:2012-11-03 05:53:14
【问题描述】:
我有一个服务器启动并运行,没有抛出任何错误。我正在从 mongodb 流式传输数据。当数据完成流式传输时,我想调用“关闭”,然后断开 mongo 数据库。
以下是我拥有的代码。当我尝试连接到服务器时,第一个请求成功,但任何其他请求都失败。
当我试图检查 mongodb 是否被断开时,我发现它不是。
你如何使用mongoose.connection.close(),它什么时候会失败?
var http = require('http')
, url = require('url')
, mongoose = require('mongoose')
, Schema = mongoose.Schema
, server, n;
server = http.createServer(function(request, response) {
var path = url.parse(request.url).pathname.slice(0, 4);
n = url.parse(request.url).pathname.slice(5);
// connect to mongo
mongoose.set('debug', true);
mongoose.connect('localhost', 'lotsOfNumber');
mongoose.connection.on('error', function(err) {
console.error('connection error: ' + err);
});
mongoose.connection.on('open',function() {
var stuff = mongoose.model('numbersHere', new Schema({serialNumber: Number}, {safe: true}));
switch (path) {
case '/slq':
var stream = stuff.find({}).limit(1).skip(n).sort('field value').stream();
stream.on('error', function(err) {
console.error("Error trying to stream from collection:" + err);
});
stream.on('data', function(doc) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.write(doc.value.toString() + '\n', 'utf8');
response.end();
});
stream.on('close', function() {
mongoose.connection.close();
mongoose.connection.on('close', function() {console.log('closed');});
});
break;
default:
console.log('nothing');
mongoose.connection.close();
break;
}
});
});
server.listen(8080);
感谢任何帮助。
【问题讨论】:
-
FWIW 删除
mongoose.connection并改用var db = mongoose.connect('localhost', 'm101', {server: {poolSize: 1}}).connection; db.on('error', console.error.bind(console, 'Could not connect to mongo server'));时问题消失了。通过将 mongoose.connection 分配给 db 并避免on('open'...)mongoose 确实关闭了数据库