Node-redis: Попробуйте, если сервер Redis запущен

Созданный на 16 окт. 2011  ·  3Комментарии  ·  Источник: NodeRedis/node-redis

У меня есть сервер node.js, который запускается при загрузке с Ubuntu upstart . Поскольку сервер node.js запускается до запуска Redis, redis.createClient() выдает исключение:

node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
Error: Redis connection to 127.0.0.1:6379 failed - ECONNREFUSED, Connection refused
    at Socket.<anonymous> (/var/www/php-jobs/node_modules/redis/index.js:88:28)
    at Socket.emit (events.js:64:17)
    at Array.<anonymous> (net.js:830:27)
    at EventEmitter._tickCallback (node.js:126:26)

Конечно, я пытаюсь заключить это в инструкцию try / catch. Начало моего сервера:

var redis  = require("redis");

function initializeRedis(callback) {
    (function createClient(){
        var client;
        try {
            client = redis.createClient();
        } catch (e) {
            setTimeout(createClient, 1000);
        }
        callback(client);
    })();
};

initializeRedis(function(client) {
  // Do things with client
});

Впрочем, это не имеет значения, у меня все же исключение. В чем может быть дело и как я могу убедиться, что мой сервер ждет до появления Redis?

question

Самый полезный комментарий

const client = redis.createClient ({
хост: process.env.redis_hostname,
порт: process.env.redis_port
})
client.on ('error', (error) => {
logger.error (сообщение об ошибке);
})
client.on ('подключиться', () => {
logger.info («Успешно подключен к redis»);
})

image
Таким образом, он будет продолжать опрос для подключения к серверу Redis, и когда он обнаружит соединение, он автоматически подключится. Спасибо @mranney за быстрое решение

Все 3 Комментарий

Это происходит потому, что клиент выдает событие «ошибка». В узле события с именем «ошибка» являются особыми. Если вы их не слушаете, они превращаются в исключения. Так что получите на своем клиенте прослушиватель «ошибки», и вы не рухнете. Мы автоматически повторяем попытку при отказе в соединении, поэтому это должно сработать само, как только вы обнаружите ошибки.

Я собираюсь переработать способ обработки переподключений и ошибок, потому что этот очень распространенный сценарий сбивает многих людей с толку.

Было ли это обработано? Я пытаюсь отловить ошибки в блоке try catch. Но это не работает.

const client = redis.createClient ({
хост: process.env.redis_hostname,
порт: process.env.redis_port
})
client.on ('error', (error) => {
logger.error (сообщение об ошибке);
})
client.on ('подключиться', () => {
logger.info («Успешно подключен к redis»);
})

image
Таким образом, он будет продолжать опрос для подключения к серверу Redis, и когда он обнаружит соединение, он автоматически подключится. Спасибо @mranney за быстрое решение

Была ли эта страница полезной?
0 / 5 - 0 рейтинги