gpt4 book ai didi

node.js - 在 redis.conf 中使用 requirepass 时将 express node.js 应用程序连接到 redis 服务器时出错

转载 作者:IT王子 更新时间:2023-10-29 06:09:19 25 4
gpt4 key购买 nike

我是 node 和 redis 的新手,我正在使用 express 设置一个简单的服务器来与 redis 通信。

启动redis-server后,我启动 Node 服务器app.js

当我在没有 requirepass 的情况下使用 redis.conf 文件时,app.js 启动并运行,但是当我添加 requirepass 时,应用程序在启动时崩溃。我可以在终端中运行 redis-cli,并且密码在那里有效。

我在运行 app.js 时得到这个 Uncaught Error 堆栈:

    throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Uncaught, unspecified 'error' event.
at RedisClient.emit (events.js:47:15)
at Command.callback (/node_modules/redis/index.js:232:29)
at RedisClient.return_error (/node_modules/redis/index.js:382:25)
at RedisReplyParser.<anonymous> (/node_modules/redis/index.js:78:14)
at RedisReplyParser.emit (events.js:64:17)
at RedisReplyParser.send_error (/node_modules/redis/lib/parser/javascript.js:265:14)
at RedisReplyParser.execute (/node_modules/redis/lib/parser/javascript.js:124:22)
at RedisClient.on_data (/node_modules/redis/index.js:358:27)
at Socket.<anonymous> (/node_modules/redis/index.js:93:14)
at Socket.emit (events.js:64:17)

这是 app.js 中的相关代码

    var REDIS_PASS = "foobar";

var express = require('express');
var app = module.exports = express.createServer();
var io = require('socket.io').listen(app);
var redisStore = require('connect-redis')(express);
var redis = require('redis');
var rdb = redis.createClient();
rdb.auth(REDIS_PASS, function(){ console.log('connected to redis-server');});

rdb.on("error",function(err){
console.log("REDIS CLIENT ERROR:" + err + '\n\n' + err.stack);
});

这是redis.conf文件

    # Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
#
#my hackerproof password:
requirepass foobar

我仍在努力了解 Node 的异步特性,所以我认为这可能是在建立与 redis 服务器的连接之前调用 auth 命令的情况,但是当我放置 auth命令进入 client.on("connect"事件的回调中,我收到了相同的错误堆栈。

我想知道捕获异常是否会允许服务器将它扫到地毯下并继续,所以我使用进程对象捕获了它。服务器似乎继续运行但不会向浏览器提供任何页面,所以我猜这个异常不能被忽略。

最佳答案

我的问题是由使用 RedisStore 对象配置我的应用程序来处理 session 引起的。在 redis.conf 文件中启用密码后,需要创建 RedisStore 对象,并将 pass 选项设置为 redis.conf 中的密码。

选项数组设置如下:

    var redisStoreOpts = {'pass':REDIS_PASS};

应用配置中的行更改为如下所示:

    app.use(express.session({ secret: SESSION_SECRET, store: new RedisStore(redisStoreOpts) }));

我希望这对遇到这个问题的任何人都有用。

关于node.js - 在 redis.conf 中使用 requirepass 时将 express node.js 应用程序连接到 redis 服务器时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7589657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com