我正在尝试将 Redis 实现到我的 Nodejs 和 ExpressJS API REST 中,但由于某种原因,我收到错误
The client is closed
。
redis-server
。redis-cli
然后通过 ping
测试了 redis cli。 PONG
已被记录为结果,因此它正在工作。创建了中间件init_redis.js
const redis = require('redis');
const redisClient = redis.createClient({
host: 'localhost',
port: 6379,
});
redisClient.on('connect', () => {
console.log('Redis connected to localhost');
});
redisClient.on('ready', () => {
console.log('Redis is ready');
});
redisClient.on('error', (err) => {
console.log('Redis Client Error', err);
});
process.on('SIGTERM', () => {
redisClient.quit();
});
module.exports = redisClient;
我尝试在我的 server.js 中测试 redis
const express = require('express');
const cors = require('cors');
const sequelize = require('./config/db');
const dotenv = require('dotenv');
const cookieParser = require('cookie-parser');
const redisClient = require('./middleware/init_redis');
// Correct usage of Redis commands
redisClient.set('foo', 'bar', (err, reply) => {
if (err) throw err;
console.log(reply);
});
redisClient.get('foo', (err, result) => {
if (err) throw err;
console.log(result);
});
当我运行 Nodejs 服务器时,我得到
The client is closed
。如果我的 Redis 服务器正在运行并且我正在连接我的客户端,为什么会发生这种情况?
假设您在 npm 中使用最新版本的
redis
(4.6.13),据记录Redis包中的函数createClient
是异步的,这意味着您必须等待建立连接才能工作正确。
请注意,您调用了 createClient 但不处理 Promise,也不在函数调用中调用
await
( https://www.npmjs.com/package/redis#basic-example )。
require 调用创建客户端,然后尝试立即使用它,从而导致您收到错误。您在使用客户端之前不允许客户端成功建立连接。