无法读取 Redis 和节点中 SET/GET 的属性.js



我刚刚开始探索redis。我想使用redis缓存一些数据。我在server.ts文件中设置了redis连接,并从那里导出。在我的控制器函数中导入它,并尝试使用set和get,但get和set都会出现此错误。

TypeError: Cannot read properties of undefined (reading 'get')
//sever.js---> redis connection part
export const client = redis.createClient({
url: "redis://127.0.0.1:6379",
});
client.connect();
client.on("error", (err) => console.log("Redis Client Error", err));
const app: Application = express();
//controller
import { client } from "../server";
const allProjects = async (req: Request, res: Response): Promise<void> => {
const cachedProjects = await client.get("projects");
if (cachedProjects) {
res.status(200).json(JSON.parse(cachedProjects));
}
const projects = await Projects.find({});
if (!projects) {
res.status(400).send("No projects found");
throw new Error("No projects found");
}
await client.set("projects", JSON.stringify(projects));
res.status(200).json(projects);
};

我的Redis服务器正在运行,我可以使用redis cli使用set/get。我在某个地方犯了一个错误,但找不到。

我正在使用Node.js、Express.js和Typescript

此错误很可能是因为clientundefined。这表明server.js中的import并没有按照您的想法运行。这可能是因为从Node.js的角度来看,server.jss很特别,因为它是运行npm start时加载的默认文件。最好将代码放在自己的文件中。

要测试这一点,请在建立连接后,尝试在server.js中执行.get.set,看看是否有效。如果是这样的话,你已经证明了你可以和Redis对话。剩下的就是调试。

此外,您可能需要参考Node Redis Github repo上的示例代码。我在这里添加它是为了方便您:

import { createClient } from 'redis';
const client = createClient();
client.on('error', (err) => console.log('Redis Client Error', err));
await client.connect();
await client.set('key', 'value');
const value = await client.get('key');

注意,阿列克谢是对的,你需要await建立一个连接。在这样做之前,你还应该添加错误处理程序。这样,如果建立连接失败,你就会知道了

等待客户端连接到服务器,然后将其导出

//sever.js---> redis connection part
const client = await redis.createClient({
url: "redis://127.0.0.1:6379",
});
await client.connect();
client.on("error", (err) => console.log("Redis Client Error", err));
const app: Application = express();
export client

我找到了解决方案。实际上,我把Redis服务器连接代码写错了地方。它毕竟应该是路径。然后它工作得很好。

app.use("/api/v1/uploads", imageUpload);
app.use("/api/v1/forgetPassword", forgetPassword);
app.use("/api/v1/resetPassword", resetPassword);
app.use("/uploads", express.static(path.join(dirname, "/uploads")));
client.connect();
client.on("connected", ()=> console.log("Redis connected"))
client.on("error", (err) => console.log("Redis Client Error", err));
app.use(notFound);
var server = app.listen(process.env.PORT || 3001, () =>
console.log(`Listening on port ${process.env.PORT}`)
); 

最新更新