我想为我的 Etherpad 编写一个 ueberDB Redis-Handler。
我绝对不明白我的问题,因为使用 PHP 我可以毫无问题地设置和获取键/值。它仅不适用于 NodeJS。
这是示例代码:
var redis = require("redis");
client = redis.createClient();
client.on("error", function (err) {
console.log("Error " + err);
});
client.set("test", "string val", redis.print);
console.log(client.get("test"));
我做错了什么?也许有人给我一个建议。
首先,你需要知道你的redis客户端是否已连接。您可以使用 console.log(client) 检查,您将看到一个名为“connected”的变量。你应该看到“true”
如果你想在节点中使用redis,你应该使用这样的东西
client.set("test","val", function(err) {
if (err) {
// Something went wrong
console.error("error");
} else {
client.get("test", function(err, value) {
if (err) {
console.error("error");
} else {
console.log("Worked: " + value);
}
});
}
});
请记住,所有 Redis 功能都是异步的。
如果从接受的答案中看不出来,则发布的代码失败的原因是由于异步性。
您在 set() 完成之前调用 get()。
您似乎在使用 Node.js 和 Redis 设置和获取数据时遇到问题。根据所提供的信息,以下是一些潜在的解决方案:
app.get("/set", async (req, res, next) => {
try {
const data = req.query.p;
await redisClient.set("test", data);
res.status(200).json({
message: "data cached",
data: data,
});
} catch (err) {
console.error(err);
res.status(500).json({
message: "Something went wrong",
});
}
});
redisClient.set('example', '01');
redisClient.get('example', (err, data) => {
console.log(data); // data is '01'
});
const express = require('express');
const session = require('express-session');
const redis = require('redis');
const client = redis.createClient();
const redisStore = require('connect-redis')(session);
const app = express();
app.use(session({
store: redisStore,
// other session options
}));
client.on('connect', function (err) {
if (err) {
console.log('Could not establish a connection with Redis.');
} else {
console.log('Connected to Redis!');
}
});
请记住将占位符代码替换为您的实际实现,并根据您的具体用例调整代码。