Как проверить состояние подключения Redis Cache от nodejs - PullRequest
1 голос
/ 01 октября 2019

Я работал над настройкой сервера кеша для моего приложения nodejs. Ниже мой проект, над которым я работаю. Простой.

У меня есть внешний API, который дает мне JSON-ответ на запрос GET. Я хочу сохранить эти ключ и JSON (значение) на сервере кеша Redis. И я могу это сделать.

Теперь, когда вызывается запрос GET, он приходит на URL моего узла -> Внешний API <- JSON в качестве ответа (который хранится в кэше). </p>

Для следующего запроса, если приходит тот же самый GET, он отправляется в кэш для получения пары ключ / значение.

Но здесь, если мой сервер кэширования недоступен или недоступен, я должен снова обратиться к APIчтобы получить значение.

Я попробовал код, подобный приведенному ниже, и он не работает, когда сервер кэша выключен. Как выполнить цикл if для получения статуса подключения к серверу Redis Cache?

Ниже представлен мой controller.js

        function getRedisCacheConnection(){

        const REDIS_PORT = process.env.PORT || 6379;
        const client = redis.createClient(REDIS_PORT);

        client.on('connect', function() {
            console.log('Redis client connected');
            console.log(`${client.connected}`);
        });

        client.on('error', function (err) {
            console.log('Something went wrong ' + err);
        })

       return client;
    }

exports.getCityCode = (req,res)=>{
    var originCity = req.query.origincity;
    var originState = req.query.originstate;

    function setReponse(originCity, response){

        return response;
    }

    const options = {
        method: 'GET',
        uri: `http://webapi.external.com/api/v3/locations?name=${originCity}`,
        headers: {
            'Content-Type': 'application/json'
        }
    }

    request(options).then(function (response){
    res.status(200).send(setReponse(originCity, response));
    const client1 = getRedisCacheConnection();
    console.dir("setting key to Cache " + originCity);
    client1.setex(originCity, 3600, response);
    });


}

exports.Cache = (req,res,next) => {    

    const originCity = req.query.origincity;

    function setReponse(originCity, response){

        return response;
    }
        const client1 = getRedisCacheConnection();
        client1.get(originCity, (err,data) =>{
            if(err) throw err;

            if(data !== null){
                console.dir(originCity + " Getting Key from Cache");
                res.status(200).send(setReponse(originCity,data));
            }
            else{
                next();
            }
        });


}

Вот мой router.js

app.get('/citycode/', city.Cache, city.getCityCode);

1 Ответ

0 голосов
/ 01 октября 2019

вы выдаваете ошибку:

            if(err) throw err;

Зарегистрируйте ошибку и не создавайте исключение.

...