UnhandledPromiseRejection警告:错误:客户端在NodeJS和Redis中关闭

68de4m5k  于 2023-08-02  发布在  Redis
关注(0)|答案(3)|浏览(190)

我正在使用JWT实现Access TokenRefresh Token,用于NodeJS应用程序中的登录功能。我尝试使用Redis来存储Refresh Token,但得到以下代码:

redis.js

const redis = require('redis');

require('dotenv').config({ path : __dirname + '/../config/env/.env' });

let redisClient;

redisClient = redis.createClient(6379, '127.0.0.1');

module.exports = redisClient;

字符串

authRoute.js

'use strict';

const JwtUtil     = require('../../middlewares/jwt-util');
const redisClient = require('../../middlewares/redis');

const authRouter = require('express').Router();

const jwt = new JwtUtil(); 

authRouter.post('/user-token/generate', (req, res, next) => {
    const accessToken = jwt.sign(req.body);

    const refreshToken = jwt.refresh();

    redisClient.set(req.body.id, refreshToken);

    res.status(200).send({
        result : 'success',
        data : {
            accessToken,
            refreshToken
        }
    });
});

module.exports = authRouter;


我已经打印了几个日志,但似乎redisClient.set(req.body.id, refreshToken);authRoute.js。中似乎有一个错误。
UnhandledPromiseRejection警告:错误:客户端已关闭
(node:24640)UnhandledPromiseRejectionWarning:未处理的promise拒绝。这个错误可能是由于在没有catch块的async函数内部抛出,或者是由于拒绝了一个没有用.catch()处理的promise。要在未处理的promise拒绝时终止节点进程,请使用CLI标志--unhandled-rejections=strict(参见https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。(拒绝ID:2)(节点:24640)[DEP0018]弃用警告:不建议使用未处理的promise拒绝。将来,未处理的promise拒绝将使用非零退出代码终止Node.js进程。
Access TokenRefresh Token正常发行。另外,下面的代码不起作用。我不知道该如何重写代码。我该怎么办?

redisClient.on('connection', () => { 
  console.info('Redis connected!');
}


虽然我使用的是Windows,但我下载了Redis,执行了ping测试,并确认服务器正在运行。

jdg4fx2g

jdg4fx2g1#

至于现在,我能够解决部分获得数据,但对于集数据仍然没有为redis v4做.#redisv4 # redisv4

app.get('/data',(req,res) => {
     // check in redis first
    //console.log(">>>>url",url)
    (async () => {
        const userInput = (req.query.country).trim()
        const url = `https://en.wikipedia.org/w/api.php?action=parse&format=json&section=0&page=${userInput}`
   
        const client = createClient({
            host:'localhost',
        port:6379});
      
        client.on('error', (err) => console.log('Redis Client Error', err));
      
        await client.connect();

        const response = await  client.get(`${userInput}`)
        if(response){
            const output = JSON.parse(response);
            res.send(output)
        }
      })();

})

字符串

vq8itlhq

vq8itlhq2#

根据文档,客户端需要通过connect()函数显式连接,以便将命令发送到目标Redis节点:

await Redis.connect();

字符串

bvhaajcl

bvhaajcl3#

我在index.js启动文件中实现了连接redis v6.2的方法。

const redis = require('redis');

const redisCache = createClient({
  url: redis://localhost:6379    
});
redisClient.on('connect', () => console.log('Connected to Redis!'));
redisClient.on('error', (err) => console.log('Redis Client Error', err));
redisClient.connect();

module.exports = redisClient;

字符串

相关问题