我正在寻找一种从节点应用程序连接到Redis数据库并执行插入和显示操作的方法。
要求-
我正在寻找一个简单的Node.js程序来实现相同目的。到目前为止,我还没有任何代码。只是想了解app.js
部分。
app.js
router.post('/route1', function(req, res)
{
keyname= req.body.keyname;
valuename= req.body.valuename;
console.log(keyname);
console.log(valuename);
client.set(keyname, valuename, function(err, reply) {
console.log(reply);
});
var redisValues = [];
client.keys('*', function (err, keys) {
if (err) return console.log(err);
if (keys) {
async.map(keys, function (key, cb) {
client.get(key, function (error, value) {
if (error) return cb(error);
var redisObj = {};
redisObj[key] = value;
redisValues.push(redisObj);
console.log(redisValues);
res.json({result1:redisValues});
});
});
}
});
});
我收到以下错误,表示多次发送响应。
错误:
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
答案 0 :(得分:1)
首先使用以下命令通过npm安装 node_redis 。
npm install redis
现在使用app.js中的以下代码从Node.js连接Redis。
var redis = require('redis');
var client = redis.createClient(); //creates a new client
默认情况下,redis.createClient()将使用 127.0.0.1 和 6379 作为 主机名和端口。如果您有其他主机/端口,则您 可以提供它们如下:
var client = redis.createClient(port, host);
存储键值对
所有Redis命令在客户端对象上以不同的功能公开。要存储一个简单的字符串,请使用以下语法:
client.set('framework', 'AngularJS');
操作完成后,您还可以传递可选的回调以获取通知:
client.set('framework', 'AngularJS', function(err, reply) {
console.log(reply);
});
如果由于某种原因操作失败,则回调的err参数表示错误。要检索键的值,请执行以下操作:
client.get('framework', function(err, reply) {
console.log(reply);
});
client.get()
使您可以检索Redis中存储的密钥。可以通过回调参数Reply访问键的值。如果密钥不存在,则reply的值为空。
使用以下命令,您将获得所有键,但没有值:
client.keys('*', function (err, keys) {
if (err) return console.log(err);
for(var i = 0, len = keys.length; i < len; i++) {
console.log(keys[i]);
}
});
您可以使用以下方法获取redis键和值:-
var redisValues = [];
client.keys('*', function (err, keys) {
if (err) return console.log(err);
if (keys) {
async.map(keys, function (key, cb) {
client.get(key, function (error, value) {
if (error) return cb(error);
var redisObj = {};
redisObj[key] = value;
redisValues.push(redisObj);
});
});
}
});