const express = require("express");
const redis = require("redis");
const app = express();
const client = redis.createClient({
url: "redis://[email protected]",
});
client.on("connect", function () {
console.log("redis connected");
console.log(`connected ${redisClient.connected}`);
});
client.on("error", (err) => {
console.log(err);
});
app.listen(process.env.PORT || 3000, () => {
console.log("Node server started");
});
The above code does not show any connection to redis server even though I have checked the EC2 redis instance by connecting using Redsmin.
hosting details in Redsmin
This is a very simple thing to do but the error that I get cannot be googled.
Node server started C:UsersSithira_105661DesktopProjectsLearningRedisnode_modules@node-redisclientdistlibclientindex.js:387
return Promise.reject(new errors_1.ClientClosedError());
^ClientClosedError: The client is closed
at Commander._RedisClient_sendCommand (C:UsersSithira_105661DesktopProjectsLearningRedisnode_modules@node-redisclientdistlibclientindex.js:387:31)
at Commander.commandsExecutor (C:UsersSithira_105661DesktopProjectsLearningRedisnode_modules@node-redisclientdistlibclientindex.js:160:154)
at Commander.BaseClass. [as set] (C:UsersSithira_105661DesktopProjectsLearningRedisnode_modules@node-redisclientdistlibcommander.js:8:29)
at Object. (C:UsersSithira_105661DesktopProjectsLearningRedisredis.js:19:8)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:17:47
Help me understand the issue. Thanks in advance.
13
Answers
finally found the solution. I used node-redis 3.0.0 rather than 4 and the code works fine. I do not know why it does not work in latest node-redis . If any of you guys are getting this issue use node-redis 3
Please check your ec2 redis connection
Connection string format:
redis[s]://[[username][:password]@][host][:port]
I used node-redis 3.1.2 rather than 4 and the code works fine.
You are using a very old version of Redis, an abandoned project by Microsoft called OpenTech Redis.
I suggest you checkout Memurai.
Memurai is an up-to-date native Windows port of Redis that derives from that project (see this commit).
Memurai is also available with a free Developer Edition.
Disclaimer: I work in Memurai.
If you’re using redis ^4.0.0, you can do this:
You can read more on their documentation here.
I don’t thing we should decrease the version from 4 to 3.
we can use –
In version 4.0.1, we have to add .connect() to run redis.
They have migration guide
This is my code, but it seems to not work well.
you can read detail at here
https://docs.redis.com/latest/rs/references/client_references/client_nodejs/
Change to Version
3.1.2
if you just want to install direct :
i think the issue may be due to v4+ using typescript in source code. if your server code is not typescript compatible. could be the issue .
I had a similar experience. I attributed the cause of the issue with the redis server I am using which is older than 5.0. So, perhaps you are in a similar situation.
According to the node-redis documentation,
"Node Redis should work with older versions of Redis, but it is not fully tested and we cannot offer support." However, "< 5.0" is marked not supported.
install the redis client 3.1.2
just put 3.1.2 in dependencies in package.json next to redis
"dependencies" : {
"redis": "3.1.2"
}
Most of the previous answers point in the correct direction. However, one minor change which caused me an hour to figure out was semi-colon and parenthesis.
Error:
It was happening due to change in redis package of nodejs. From
4.x.x
versions, the API to connect database has significantly changed.The correct syntax now is:
Inside immediately Invoked Function Expressions (IIFE) require parenthesis to invoke them.
PS:
async
andawait
are necessary as Node Redis now uses native Promises by default for all functions.Documentation: https://github.com/redis/node-redis/blob/master/docs/v3-to-v4.md