@devback/redis

1.0.3 • Public • Published

redis

Дополненный модуль node_redis для работы с socket.io и перенаправления сообщений по процессам

// подключение
const redis = require('@devback/redis');

createEmitter([userdata])

  • userdata (object | null) данные пользователя для передачи с сообщениями

Создаем объект класса RedisEmitter и устанавливает данные пользователя для каждого сообщения

listen(channel, methods)

  • channel (string) название канала
  • methods (object | function) объект где ключ название метода, а значение функция данного метода или функция

Слушает указанный канал и вызывает указанные методы с переданными данными.
Если вместо методов была указана функция, то первым аргументом передается метод

middleware(channel, methods)

  • channel (string) название канала
  • methods (object | function) объект где ключ название метода, а значение функция данного метода или функция

Слушает указанный канал и устанавливает промежуточные методы или функцию которые/которая получает последним аргументом функцию next чтобы передать выполнение дальше. Если в next передать ошибку первым аргументом, то выполнение остановиться и будет выброшен евент middleware-error

const redis = {
    pub: require('@devback/redis').createClient(...),
    sub: require('@devback/redis').createClient(...)
};

// устанавливаем промежуточную функцию для валидации data
redis.sub.middleware('chat/global', function(method, userdata, data, next) {
    if(Object(data) !== data || typeof(data.msg) !== 'string') {
        return next(new Error('Неправильный формат сообщения'));
    }

    next();
});

// если сообщение дошло до listen, значит оно прошло все промежуточные функции успешно
redis.sub.listen('chat/global', {

    message: function(userdata, data) {
        console.log(userdata.userid); // будет 1

        console.log(data.msg); // будет "Hi!"
    }

});

// также можно слушать все сообщения одного канала
redis.sub.listen('chat/global', function(method, userdata, data) {

});

// или устанавливать промежуточную функцию только для одного метода
redis.sub.middleware('chat/global', {

    message: function(userdata, data, next) {

    }

});

// если одна из промежуточных функций вернула ошибку, то выбрасывается данная ошибка
redis.sub.on('middleware-error', function(err, obj) {
    // пример ошибки:
    // err = 'Неправильный формат сообщения'
    // obj = {
    //     method: 'message',
    //     userdata: {
    //         userid: 1
    //     },
    //     data: {
    //         msg: 'Hi!'
    //     }
    // }
});

setTimeout(function() {

    let emitter = redis.pub.createEmitter({
        userid: 1
    });

    emitter.send('chat/global', 'message', {
        msg: 'Hi!'
    });

}, 100);

RedisEmitter

Класс который позволяет передавать сообщения по каналам redis с использованием методов

send(channel, method, data[, callback])

  • channel (string) название канала
  • method (string) метод который будет вызываться на том конце для этого сообщения
  • data (mix) данные что нужно передать
  • callback (function) функция обратного вызова, которая будет передаваться во функцию publish

Отправляет сообщение по указанному каналу и с указанным методом и данными

redirect(channel, method)

  • channel (string) название канала
  • method (string) метод который будет вызываться на том конце для этого сообщения

Перенаправляет сообщения от евентов (socket.io или другие) по указанному каналу и методу

io.on('connection', function(socket) {
    // создаем RedisEmitter с данными которые нужно отправлять с каждым запросом
    let emitter = redis.createEmitter({
        socketid: socket.id,
        userid: socket.uid,
        lang: socket.lang
    });

    // создаем функцию перенаправления сообщений от сокета
    socket.on('chat/global:message', emitter.redirect('chat/global', 'message'));
});

Readme

Keywords

none

Package Sidebar

Install

npm i @devback/redis

Weekly Downloads

0

Version

1.0.3

License

MIT

Unpacked Size

12.5 kB

Total Files

5

Last publish

Collaborators

  • devback