取消订阅Node.JS中的Rethink DB Outside函数

时间:2017-08-23 12:33:25

标签: javascript node.js socket.io rethinkdb rethinkdb-javascript

我使用Socket.io和Rethink DB在Node.js上推送实时数据。 订阅流可以工作,但是当用户断开连接时,我可以弄清楚如何取消订阅重新考虑数据库。

这是我的代码:

app.js的一部分:

// Adding socket.io
app.io = require('socket.io')();
var feed;
// On connection to the socket, just invoking the function.
app.io.on('connection',function(socket) {
  console.log('Client connected...');
  feed = require('./feed')(socket);
  socket.on('disconnect', function() {
      console.log('Got disconnect!');

      # Here I'd like to unsubscribe

   });
});

feed.js:

var r = require('rethinkdb');
var dbConfig = require('./config/database');
module.exports = function(socket) {
  var connection = r.connect(dbConfig)
  .then(function (connection) {

    r.db('Minicall').table('Message').changes().run(connection,function(err,cursor) {
      if(err) {
        console.log(err);
      }
      cursor.each(function(err,row) {
        console.log(JSON.stringify(row));
        if(Object.keys(row).length > 0) {
          console.log("send");
          socket.emit("msgFeed",{"timestamp" : row.new_val.timestamp, "message" : row.new_val.message ,"ric" : row.new_val.ric});
        }
      });
    });
  });
};

那么,当socket.on('disconnect')被调用时,如何停止订阅(connection.stop())?可能是一个简单的解决方案,因为我对node和js完全不熟悉。

1 个答案:

答案 0 :(得分:0)

您可以为一个事件设置多个事件监听器,因此在您的光标中,您将添加一个可以调用cursor.close()的断开连接事件监听器:

r.db('Minicall')
.table('Message')
.changes()
.run(connection, function(err, cursor) {
  if(err) {
    console.log(err);
  }
  cursor.each(function(err,row) {
    console.log(JSON.stringify(row));
    if(Object.keys(row).length > 0) {
      console.log("send");
      socket.emit("msgFeed",{"timestamp" : row.new_val.timestamp, "message" : row.new_val.message ,"ric" : row.new_val.ric});
    }
  });
  socket.on('disconnect', function() {
    cursor.close();
  });
});