将数据库查询存储在nodejs中(使用socket.io)
Storing db queries in nodejs (with socket.io)
我的代码有一个(可能是愚蠢的)问题。我有这样的东西:
io.sockets.on('connection', function(socket)
{
var list = {};
socket.on('event', function(data){
if(!list[data.field_name]){
list[data.field_name] = [];
// db and collection already defined
var collection = new mongodb.Collection(db, coll);
collection.find({
field: data.field_name,
}).toArray(function(err, results){
list[data.field_name] = results[results.length-1];
socket.emit('another-event',{
list:list[data.field_name];
});
});
} else {
socket.emit('another-event',{
list:list[data.field_name];
});
}
});
}
我基本上是在尝试将数据库结果缓存在列表中,并直接发送它(不带数据库查询),如果它之前已经从数据库中检索到的话。
我遇到的问题是作业list[data.field_name] = results[results.length-1]
不起作用。因此,如果它以前尝试过检索数据,则list[data.field_name]
已初始化为[]
,但它不包含之后分配给它的数据。
需要明确的是,它确实从数据库fine中检索数据,并在第一次从数据库中检索数据时将其正确地发送到客户端。当我尝试发送缓存副本时,问题就出现了——没有缓存副本。
我知道这与nodejs(和mongodb查询)异步有关,但我似乎不知道如何实现这一点。任何帮助都将不胜感激。
在对集合的查询完成之前,您将发出another-event
。如果在发射another-event
时还没有检索到数据,则list[data.field_name]
将仍然为空。试试类似的东西:
io.sockets.on('connection', function(socket)
{
var list = {};
socket.on('event', function(data){
var anotherEvent = function() {
socket.emit('another-event',{
list:list[data.field_name];
});
};
if(!list[data.field_name]){
list[data.field_name] = [];
// db and collection already defined
var collection = new mongodb.Collection(db, coll);
collection.find({
field: data.field_name,
}).toArray(function(err, results){
list[data.field_name] = results[results.length-1];
anotherEvent();
});
} else {
anotherEvent();
}
});
}
相关文章:
- 如何使用Socket.io将命令从客户端发送到服务器
- AngularJS$q承诺使用socket.io
- 如何知道使用socket.io订阅/取消订阅频道
- 如何使用socket.io在meanjs项目中配置jshint
- 如何使用Socket.io和Node.js开发大型聊天应用程序
- 使用socket.io更新express实时视图
- 使用Socket.io的异步模块加载(AMD)
- 使用 socket.io 时如何发送文件(html,js,css和资源)
- 使用socket.io、jquery mobile、socket.emit();的时序逻辑有点奇怪;
- 如何使用socket.io获取cookie数据
- 将数据库查询存储在nodejs中(使用socket.io)
- 如何使用socket IO检查有多少参与者连接到我的聊天室
- 如何在Aurelia中使用socket.io
- 如何使用Socket.io和Express处理会话
- 如何在express中使用socket.io发布多个对象数据
- 在不同子域上使用Socket.IO服务器和客户端
- 使用Socket.io和iPhone加速计
- 使用Socket.io传递JavaScript变量
- Json在动态接收时无法解析(使用socket.io)
- 使用socket.io发送数据