NodeJS连接AWS Redis缓存认证失败求助(redis-cli可正常连接)
解决Node.js连接AWS Redis时的NOAUTH认证错误
你的问题根源在于node-redis v4+版本的配置结构错误:你把Redis密码password放在了socket子配置里,但这个版本中认证信息属于客户端的顶层配置项,不是socket的属性。这就导致客户端连接时没有自动发送AUTH命令,触发了NOAUTH Authentication required.错误。
修改后的正确代码
const redis = require('redis'); console.log('hello'); // 正确配置:password放在客户端顶层,而非socket内 const redisClient = redis.createClient({ socket: { host: "master.dev.xxx.use1.cache.amazonaws.com", port: 6379, tls: true, reconnectStrategy: function () { const retries = 35000; return retries; } }, password: "XXX" // 移到这里! }); // node-redis v4的connect方法本身就是Promise,无需手动promisify redisClient.connect() .then(async () => { console.log("connected successfully"); // 连接成功后再执行命令,避免未就绪报错 // 设置key await redisClient.set('Finalli', 'value'); console.log('Set key successfully'); // 获取key const value = await redisClient.get('key'); console.log('Value: ' + value); }) .catch((error) => { console.log('连接或操作错误:', error); }); redisClient.on('error', (err) => { console.log('客户端错误:', err); });
关键说明
- 配置层级修正:
password必须放在createClient的顶层配置中,socket配置只负责连接的网络参数(host/port/tls等)。 - 无需手动promisify:node-redis v4的API已经全部Promise化,直接使用
await或.then()即可,不用再借助util.promisify。 - 命令时机:所有Redis操作(set/get等)必须在
connect()成功之后执行,否则会因为连接未建立而报错。
验证步骤
- 替换代码中的
host和password为你的实际信息 - 运行
node app.js,应该输出:
hello connected successfully Set key successfully Value: [对应key的value或null]
内容的提问来源于stack exchange,提问作者Vinoth Karthick
相关产品推荐
相关产品推荐

