redis 在连接时冻结节点服务器
redis freezes node server when connected
我正在尝试使用 redis 来存储具有 express-session 的会话。这是代码:
//Imports
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const session = require('express-session');
const logger = require('morgan');
//Connect to Redis
const redis = require('redis');
let RedisStore = require('connect-redis')(session);
let redisClient = redis.createClient();
redisClient.connect();
redisClient.on('connect', () => console.log('Connected to Redis..'));
app.use(
session({
store: new RedisStore({ client: redisClient }),
saveUninitialized: false,
secret: 'keyboard cat',
resave: false,
})
);
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(logger('dev'));
app.get('/', function (req, res) {
var body = '';
console.log(req.session);
if (req.session.views) {
++req.session.views;
} else {
req.session.views = 1;
body += '<p>First time visiting? view this page in several browsers :)</p>';
}
res.send(
body + '<p>viewed <strong>' + req.session.views + '</strong> times.</p>'
);
});
app.listen(3000, () => console.log('App is listening on port 3000'));
每当我启动我的应用程序时,它都会冻结。我检查了 redis-cli 并用响应 'PONG' 对它执行了 ping 操作。 redis-server 启动正常。每当我删除以下行时:
redisClient.connect();
redisClient.on('connect', () => console.log('Connected to Redis..'));
只要我点击“/”路线,应用程序就会崩溃。但如果我输入了这些行,应用程序就会挂在那里,什么都不做。我在这里查看了文档,他们说您需要在执行任何命令之前进行连接:
https://github.com/redis/node-redis/blob/HEAD/docs/v3-to-v4.md#no-auto-connect
我 运行 的代码来自 connect-redis npm 页面:
https://www.npmjs.com/package/connect-redis
我不确定服务器为什么会死机。如果我从会话中删除存储,它工作正常,所以它肯定与 redis 有关,但在节点端。 Redis 服务器在本地主机上 运行 正常。有什么建议吗?
**更新
我检查了 connect-redis repo 问题,发现其他人遇到了与我相同的问题。问题将在下一次提交中解决:
目前这是一个已知问题。目前 connect-redis 与最新版本的 node redis 不兼容。
https://github.com/tj/connect-redis/issues/336
将以下内容添加到您的客户端以修复此问题,直到打补丁:
const client = createClient({
legacyMode: true
});
我正在尝试使用 redis 来存储具有 express-session 的会话。这是代码:
//Imports
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const session = require('express-session');
const logger = require('morgan');
//Connect to Redis
const redis = require('redis');
let RedisStore = require('connect-redis')(session);
let redisClient = redis.createClient();
redisClient.connect();
redisClient.on('connect', () => console.log('Connected to Redis..'));
app.use(
session({
store: new RedisStore({ client: redisClient }),
saveUninitialized: false,
secret: 'keyboard cat',
resave: false,
})
);
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(logger('dev'));
app.get('/', function (req, res) {
var body = '';
console.log(req.session);
if (req.session.views) {
++req.session.views;
} else {
req.session.views = 1;
body += '<p>First time visiting? view this page in several browsers :)</p>';
}
res.send(
body + '<p>viewed <strong>' + req.session.views + '</strong> times.</p>'
);
});
app.listen(3000, () => console.log('App is listening on port 3000'));
每当我启动我的应用程序时,它都会冻结。我检查了 redis-cli 并用响应 'PONG' 对它执行了 ping 操作。 redis-server 启动正常。每当我删除以下行时:
redisClient.connect();
redisClient.on('connect', () => console.log('Connected to Redis..'));
只要我点击“/”路线,应用程序就会崩溃。但如果我输入了这些行,应用程序就会挂在那里,什么都不做。我在这里查看了文档,他们说您需要在执行任何命令之前进行连接:
https://github.com/redis/node-redis/blob/HEAD/docs/v3-to-v4.md#no-auto-connect
我 运行 的代码来自 connect-redis npm 页面:
https://www.npmjs.com/package/connect-redis
我不确定服务器为什么会死机。如果我从会话中删除存储,它工作正常,所以它肯定与 redis 有关,但在节点端。 Redis 服务器在本地主机上 运行 正常。有什么建议吗?
**更新
我检查了 connect-redis repo 问题,发现其他人遇到了与我相同的问题。问题将在下一次提交中解决:
目前这是一个已知问题。目前 connect-redis 与最新版本的 node redis 不兼容。 https://github.com/tj/connect-redis/issues/336
将以下内容添加到您的客户端以修复此问题,直到打补丁:
const client = createClient({
legacyMode: true
});