Tengo una aplicación de nodo que usa la base de datos redis para almacenar mis tokens de actualización. Estoy tratando de obtener el valor de los datos aquí en una función de devolución de llamada cuando utilicé el método .get() en redis. Pero no está funcionando. En cartero, cuando hago la solicitud, no devuelve nada. Permanece en 'solicitud de envío' para siempre. Aquí está la función:
const {get, set} = require('../reditConnect');//coming from redis connection const refreshTokenverify = async (req, res, next) =>{ try{ const payload = jwt.verify(token, process.env.Refresh_Secret) req.user = {userId:payload.userId}; console.log(req.user) await get(payload.userId.toString(), (err, data)=>{ console.log(data) }); next() }catch(err){ return res.status(401).json({message: "Invalid token"}) } };Aquí está el código de conexión redis:
const redis = require('redis'); const { promisify } = require("util"); const redis_client = redis.createClient(); redis_client.connect() redis_client.on('connect', function(){ console.log('redis client connected') }); redis_client.on('ready', ()=>{ console.log("client is connected to redis and ready to use..") }); redis_client.on('error', (err)=>{ console.log(err) }); redis_client.on('end', ()=>{ console.log('client diconnected from redis') }); process.on('SIGINT', ()=>{ redis_client.quit() }) const get = promisify(redis_client.get).bind(redis_client); const set = promisify(redis_client.set).bind(redis_client) module.exports = { get, set } ¿Cómo me acerco a esto? El código deja de funcionar en console.log(req.user) Obtengo un console.log para eso, pero la solicitud nunca termina, permanece enviando la solicitud cuando utilicé cartero.
promisify devolverá la promesa para que no necesite usar la devolución de llamada.
usa esta linea
const data = await get(payload.userId.toString());en lugar de esta línea
await get(payload.userId.toString(), (err, data)=>{ console.log(data) });