目前我有一个cache.js文件来启动redis,以便重用连接。
缓存.js
const redis = require('redis');
const { promisify } = require("util");
const client = redis.createClient({ host: process.env.REDIS_HOST, port: process.env.REDIS_PORT, password: process.env.REDIS_PASSWORD })
client.on('error', function(err) {
console.log('error encountered', err.toString())
return null
});
const getAsync = promisify(client.get).bind(client);
const setAsync = promisify(client.set).bind(client);
const setexAsync = promisify(client.setex).bind(client);
module.exports = { getAsync, setAsync, setexAsync }
我如何使用它。
try {
const redis = require('lib/cache')
const results = await redis.getAsync(key)
if (results) {
return res.json(JSON.parse(results));
}
} catch(err) {
console.log('redis error => ', err) //this is not important, I want to proceed to get data from db.
}
....... continue codes to get data from database since there's no cache.
这一切都很好,直到出现错误(例如redis服务器关闭、redis连接不可用、密码错误等),节点应用程序卡住为止。
它在console.log发出的.on('error')事件返回错误后不会继续。
我想要什么。因为我将它用作缓存,所以我希望它继续服务并从数据库返回数据,而忽略缓存。redis缓存的可用性在我的应用程序中并不重要。
我怎样才能达到我想要的?
我尝试在emit事件中返回null,但不起作用,我还尝试从.on('error')事件抛出错误,但没有抛出错误。
暂无答案!
目前还没有任何答案,快来回答吧!