Node.js向Redis列表推送数据遇TypeError错误求助
问题原因及解决方法
这个错误是因为你使用的是node-redis v4+版本,该版本API和旧版有核心差异:
- 不再支持回调风格的命令调用,全部改为Promise/async-await形式
RPUSH的参数传递方式错误,不能把列表名和值放在同一个数组里
修正后的代码
const redis = require("redis"); const redisclient = redis.createClient(); // 打印详细错误信息,方便排查 redisclient.on("error", (err) => { console.log("Redis连接错误:", err); }); // 确保Redis连接成功后再启动定时任务 (async () => { try { await redisclient.connect(); console.log("Connected!"); setInterval(generateRandomNumber, 1000); } catch (err) { console.log("连接Redis失败:", err); } })(); const generateRandomNumber = async () => { const randomNumber = Math.floor(Math.random() * 100000); console.log('Generated random number:', randomNumber); try { // v4版本RPUSH的正确写法:列表名 + 要推入的值 const reply = await redisclient.RPUSH('randomNumbers', randomNumber); console.log(`Stored ${randomNumber} in Redis list,返回值: ${reply}`); } catch (err) { console.log('Error in rPush:', err); } }
关键修改点
- 将连接逻辑和定时任务启动绑定,避免在未连接时执行Redis命令
generateRandomNumber改为async函数,用await替代回调调用RPUSH- 调整
RPUSH参数格式,不再用数组包裹列表名和值
额外选项
如果需要兼容旧版代码逻辑,可以安装node-redis v3版本:
npm install redis@3
内容的提问来源于stack exchange,提问作者be MrZulf
相关产品推荐
相关产品推荐

