Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Redis客户端连接到Redis远程服务器,但可以';不要在上面读或写_Node.js_Express_Redis_Digital Ocean_Express Session - Fatal编程技术网

Node.js Redis客户端连接到Redis远程服务器,但可以';不要在上面读或写

Node.js Redis客户端连接到Redis远程服务器,但可以';不要在上面读或写,node.js,express,redis,digital-ocean,express-session,Node.js,Express,Redis,Digital Ocean,Express Session,在DegitalOcean中,我必须管理两台服务器'Nodeserver'和一台redis服务器'Redisserver',方法是通过前者上的node/express应用程序建立连接,以使用后者的数据库 为了进行本地测试,我还在“Nodeserver”上本地安装了另一台redis服务器“LocalRedisOnNodeServer” 我已将“Redisserver”配置为接受中的外部连接,并且在尝试从“LocalRedisOnNodeServer”的redis cli连接时,我能够访问远程“re

在DegitalOcean中,我必须管理两台服务器'Nodeserver'和一台redis服务器'Redisserver',方法是通过前者上的node/express应用程序建立连接,以使用后者的数据库

为了进行本地测试,我还在“Nodeserver”上本地安装了另一台redis服务器“LocalRedisOnNodeServer”

我已将“Redisserver”配置为接受中的外部连接,并且在尝试从“LocalRedisOnNodeServer”的redis cli连接时,我能够访问远程“redis_server”数据库,并且还可以通过该数据库进行读写操作

我仍然没有为“Redis_server”(编辑iptables…)配置任何安全措施,我只设置了一个密码(Redis.conf中的requirepass),我仍然不知道是否可以在此服务器上使用SSH进行更安全的身份验证(或者为其配置我的应用程序代码)

下面是app.js文件,其中包含express的会话和传递给会话的RedisStore(以args形式接收redis客户端)

var express = require('express');
var app = express();
var routes = require('./routes');
var errorHandlers = require('./middleware/errorhandlers');
var log = require('./middleware/log');
var partials = require('express-partials');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
var bodyParser = require('body-parser');
var redis = require('redis');
var config = require('./config');

app.set('view engine', 'ejs');
app.set('view options', {defaultLayout: 'layout'});

app.use(partials());
app.use(log.logger);
app.use(express.static(__dirname + '/static'));
app.use(cookieParser(config.secret));

console.log(config.redisConf);

var redisClient = redis.createClient(config.redisConf);

redisClient.on('connect', function() {
console.log('connected to redis!!');
});

redisClient.set('framework', 'AngularJS', function(err, reply) {
console.log('the framwork var was SET to AngularJS : the following is the server answer : ');
console.log(reply);
});

app.use(session({
secret: config.secret,
resave: false,
saveUninitialized: true,
store: new RedisStore({client: redisClient})

}));

// right after the session
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));

app.get('/', routes.index);
app.get('/login', routes.login);
app.post('/login', routes.loginProcess);
app.get('/chat', routes.chat);
app.get('/account/login', routes.login);

app.get('/error', function(req, res, next){
next(new Error('A contrived error'));
});

app.use(errorHandlers.error);
app.use(errorHandlers.notFound);

app.listen(config.port);
console.log("App server running on port " + config.port);
这是config.js:

var config = {
port: 3000,
secret: 'secret',

redisConf: {
host: 'xxx.xxx.xxx.xxx.', // The redis's server ip 
port: '6379',
pass: 'theredispass'
}
};    
module.exports = config;
我已经测试了与本地redis服务器“LocalRedisOnNodeServer”的应用程序连接,并且它成功地读取和写入了密钥(用于set和get…)。 这证明了应用程序代码是正确的。但是,当我从redis主机(redisConf.host)从本地127.0.0.1更改为“Redisserver”ip时,只会发生连接(redisClient.on('connect'回调记录它是“连接到redis!!”),但读写函数(get和set)失败,因为它们的回调尚未触发,另一个问题是无法创建express的会话,其值仍然未定义

我想知道为什么在应用程序代码中的redisClient出现故障时,在节点服务器外壳(RedisCLI)上的本地redis服务器客户端内,连接以及读写操作都可以与远程服务器进行

redis_6379.log中未提及任何错误


最诚挚的问候

我首先通过添加

client.on("error", function (err) {
    console.log("Error " + err);
});
因此,我可以看出问题所在(事实上,我的错误是认为redisClient属于connect redis模块,因此我没有看到节点上的所有可用选项。\u redis模块..)添加的代码向我显示了问题与中的类似,这要归功于,而且,我发现最好将get方法移动到集合的回调中,因为远程服务器将异步应答