MongoDB 查询重置到 Node.js 服务器的套接字连接
MongoDB query resets socket connection to Node.js server
对我的 MongoDB 数据库执行查找查询似乎重置了连接并使节点服务器崩溃。
我的服务器像这样处理套接字事件:
io.sockets.on('connection', function(socket) {
MongoClient.connect(url, function(err, db) {
if (err)
console.log('Error');
console.log('Connection established to', url);
var collection = db.collection('spedizioni');
socket.on('adminReq', function() {
handlers.handleAdmin(collection, socket);
});
});
});
handleAdmin 函数是:
function handleAdmin(collection, socket) {
console.log('Admin event');
collection.find(null, function(err, raw) {
console.log('Find function');
console.log(raw);
if (err){
socket.emit('err');
console.log('Error function');
}
if (raw) {
socket.emit('adminRes', raw);
console.log('Response function');
} else {
socket.emit('adminNull');
console.log('Null function');
}
});
}
我希望查询 return 数据库中的所有项目;根据 MongoDB 手册,我通过执行不带参数的查找查询来做到这一点。
我尝试省略 null 或使用 {} 作为第一个参数,但没有任何变化。
按下按钮生成 adminReq 事件后,'Connection to DB' 字符串会打印在控制台上,并且 firefox 控制台会发出与套接字的新连接已建立的信号;我的客户端脚本在 document.load 连接一次。
下面是之后的节点控制台输出;如您所见,查询已执行;查看 'raw' 输出,似乎尝试失败。
err 为 null,没有其他输出。
查看其他关于 'maximum call stack' exceeded 的答案,似乎通常是由递归函数引起的,但这里不是这种情况。
为什么这是输出而不是查询结果?为什么连接会重置?
一个非常相似的函数工作正常并且 return 整个数据库的语法似乎是正确的,感觉我遗漏了一些非常明显的东西...
- 不确定是否可以使用 null,但我认为空对象应该可以工作
您需要将结果转换为数组
collection.find({}).toArray(function(err, raw) {
console.log('Find function');
console.log(raw);
if (err){
socket.emit('err');
console.log('Error function');
}
if (raw) {
socket.emit('adminRes', raw);
console.log('Response function');
} else {
socket.emit('adminNull');
console.log('Null function');
}
});
对我的 MongoDB 数据库执行查找查询似乎重置了连接并使节点服务器崩溃。
我的服务器像这样处理套接字事件:
io.sockets.on('connection', function(socket) {
MongoClient.connect(url, function(err, db) {
if (err)
console.log('Error');
console.log('Connection established to', url);
var collection = db.collection('spedizioni');
socket.on('adminReq', function() {
handlers.handleAdmin(collection, socket);
});
});
});
handleAdmin 函数是:
function handleAdmin(collection, socket) {
console.log('Admin event');
collection.find(null, function(err, raw) {
console.log('Find function');
console.log(raw);
if (err){
socket.emit('err');
console.log('Error function');
}
if (raw) {
socket.emit('adminRes', raw);
console.log('Response function');
} else {
socket.emit('adminNull');
console.log('Null function');
}
});
}
我希望查询 return 数据库中的所有项目;根据 MongoDB 手册,我通过执行不带参数的查找查询来做到这一点。
我尝试省略 null 或使用 {} 作为第一个参数,但没有任何变化。
按下按钮生成 adminReq 事件后,'Connection to DB' 字符串会打印在控制台上,并且 firefox 控制台会发出与套接字的新连接已建立的信号;我的客户端脚本在 document.load 连接一次。
下面是之后的节点控制台输出;如您所见,查询已执行;查看 'raw' 输出,似乎尝试失败。 err 为 null,没有其他输出。
查看其他关于 'maximum call stack' exceeded 的答案,似乎通常是由递归函数引起的,但这里不是这种情况。
为什么这是输出而不是查询结果?为什么连接会重置?
一个非常相似的函数工作正常并且 return 整个数据库的语法似乎是正确的,感觉我遗漏了一些非常明显的东西...
- 不确定是否可以使用 null,但我认为空对象应该可以工作
您需要将结果转换为数组
collection.find({}).toArray(function(err, raw) { console.log('Find function'); console.log(raw); if (err){ socket.emit('err'); console.log('Error function'); } if (raw) { socket.emit('adminRes', raw); console.log('Response function'); } else { socket.emit('adminNull'); console.log('Null function'); } });