Nerfed Poet Melancholia

    @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'));
    });

    Keywords

    none

    Install

    npm i @devback/redis

    DownloadsWeekly Downloads

    2

    Version

    1.0.3

    License

    MIT

    Unpacked Size

    12.5 kB

    Total Files

    5

    Last publish

    Collaborators

    • devback