Отписаться от Rethink DB Внешняя функция в Node.JS

Я использую 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});
        }
      });
    });
  });
};

Итак, как я могу остановить подписку (connection.stop()), когда вызывается socket.on('connect')? Вероятно, простое решение, так как я совершенно новичок в узле и JS.

1 ответ

Вы можете иметь более одного прослушивателя событий, поэтому в своем курсоре вы добавите прослушиватель событий отключения, который может вызывать 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();
  });
});
Другие вопросы по тегам