RedisStore 忽略主机和端口字段
RedisStore ignores host and port fields
我正在使用 express
和 connect-redis
让服务器使用 Redis 进行会话。
import Session from 'express-session';
const session = Session({
resave: true,
saveUninitialized: true,
key: '...',
secret: '...',
store: initializeRedis(Session);
});
redis 初始化程序如下所示:
import { createClient as createRedisClient } from 'redis';
import connectRedis from 'connect-redis';
export default function initializeRedis(Session) {
const redisClient = createRedisClient();
const RedisStore = connectRedis(Session);
return new RedisStore({
host: 'redis',
port: 6378,
});
}
根据前面的 option parameters,服务器应该通过端口 6378
而不是默认的 6379
连接到 redis
而不是默认的 127.0.0.1
]
但是,无论这些值等于多少,我总是得到相同的输出:
Error: Redis connection to 127.0.0.1:6379 failed - connect
ECONNREFUSED 127.0.0.1:6379
我在配置过程中遗漏了什么吗?
TL;DR
Redis 客户端缺少 host
和 port
参数。 RedisStore
.
里面没有客户端
const redisClient = createRedisClient({
host: 'redis',
port: 6379
});
return new RedisStore({
client: redisClient,
});
post 末尾的完整 copy-paste 可用代码,以防对其他人有用。
完整版
有几种方法可以解决上面的代码。
1. const redisClient = createRedisClient()
无处分配 ,但它仍在执行连接工作。因此,服务器因为无法连接而崩溃,但这不是 RedisStore
故障。
在我 post 提出问题时,我没有注意到那条线,我以为它是因为商店而崩溃。
事实上,没有那一行它也能工作,因为 RedisStore has a default client implementation.
or
created for you using the host, port, or socket params.
return new RedisStore({
host: 'redis',
port: 6379,
});
2。 Redis 客户端缺少主机和端口自定义值(默认值为'127.0.0.1'
和6379
)
import { createClient as createRedisClient } from 'redis';
const redisClient = createRedisClient({
host: 'redis',
port: 6379
});
如果我们使用特定的客户端实现,将它传递给 RedisStore
:
也是有意义的
const RedisStore = connectRedis(Session);
return new RedisStore({
client: redisClient,
});
完整的外卖代码
server.js
import Session from 'express-session';
import initializeRedis from './redis';
// Initialize session.
const session = Session({
resave: true,
saveUninitialized: true,
key: 'SID',
secret: 'Luke Skywalker',
store: initializeRedis(Session)
});
app.use(session);
redis.js
import { createClient as createRedisClient } from 'redis';
import connectRedis from 'connect-redis';
export default function initializeRedis(Session) {
const redisClient = createRedisClient({
host: 'redis', // or '127.0.0.1'.
port: 6379,
});
const RedisStore = connectRedis(Session);
return new RedisStore({ client: redisClient });
}
我正在使用 express
和 connect-redis
让服务器使用 Redis 进行会话。
import Session from 'express-session';
const session = Session({
resave: true,
saveUninitialized: true,
key: '...',
secret: '...',
store: initializeRedis(Session);
});
redis 初始化程序如下所示:
import { createClient as createRedisClient } from 'redis';
import connectRedis from 'connect-redis';
export default function initializeRedis(Session) {
const redisClient = createRedisClient();
const RedisStore = connectRedis(Session);
return new RedisStore({
host: 'redis',
port: 6378,
});
}
根据前面的 option parameters,服务器应该通过端口 6378
而不是默认的 6379
连接到 redis
而不是默认的 127.0.0.1
]
但是,无论这些值等于多少,我总是得到相同的输出:
Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
我在配置过程中遗漏了什么吗?
TL;DR
Redis 客户端缺少 host
和 port
参数。 RedisStore
.
const redisClient = createRedisClient({
host: 'redis',
port: 6379
});
return new RedisStore({
client: redisClient,
});
post 末尾的完整 copy-paste 可用代码,以防对其他人有用。
完整版
有几种方法可以解决上面的代码。
1. const redisClient = createRedisClient()
无处分配 ,但它仍在执行连接工作。因此,服务器因为无法连接而崩溃,但这不是 RedisStore
故障。
在我 post 提出问题时,我没有注意到那条线,我以为它是因为商店而崩溃。
事实上,没有那一行它也能工作,因为 RedisStore has a default client implementation.
or created for you using the host, port, or socket params.
return new RedisStore({
host: 'redis',
port: 6379,
});
2。 Redis 客户端缺少主机和端口自定义值(默认值为'127.0.0.1'
和6379
)
import { createClient as createRedisClient } from 'redis';
const redisClient = createRedisClient({
host: 'redis',
port: 6379
});
如果我们使用特定的客户端实现,将它传递给 RedisStore
:
const RedisStore = connectRedis(Session);
return new RedisStore({
client: redisClient,
});
完整的外卖代码
server.js
import Session from 'express-session';
import initializeRedis from './redis';
// Initialize session.
const session = Session({
resave: true,
saveUninitialized: true,
key: 'SID',
secret: 'Luke Skywalker',
store: initializeRedis(Session)
});
app.use(session);
redis.js
import { createClient as createRedisClient } from 'redis';
import connectRedis from 'connect-redis';
export default function initializeRedis(Session) {
const redisClient = createRedisClient({
host: 'redis', // or '127.0.0.1'.
port: 6379,
});
const RedisStore = connectRedis(Session);
return new RedisStore({ client: redisClient });
}