无法连接到节点中的redis
Cannot conect to redis in Node
我正在尝试创建一个基本的缓存应用程序来测试 redis。我正在使用 Redis 版本:4.0.6.
首先我收到错误 clientclosederror: 客户端已关闭。
然后,在阅读文档后,我添加了
let client;
(async ()=> {
client = redis.createClient()
await client.connect()
})();
但是现在,在尝试 Postman 时,它只是挂起,没有返回任何响应
完整代码:
const express = require("express");
const redis = require("redis");
const axios = require('axios')
const app = express();
let client;
(async ()=> {
client = redis.createClient()
await client.connect()
})();
app.get('/result', async (req, res) => {
const searchTerm = req.query.name;
try {
await client.get(searchTerm, async (err, result) => {
console.log('cached called')
if (err) throw err;
if (result) {
res.status(200).send({
result: JSON.parse(result),
message: "data retrieved from the cache"
});
}
else {
const result = await axios.get(`https://api.agify.io/?name=${searchTerm}`);
await client.set(searchTerm, JSON.stringify(result.data));
return res.status(200).send({
result: result.data,
message: "cache miss"
});
}
})
} catch (error) {
console.log('get error', error)
return res.status(500).send({ message: error.message })
}
})
app.listen(process.env.PORT || 3000, () => {
console.log("Node server started");
});
client.get
不需要回调函数。它是异步的。我的猜测是它永远不会被调用,因此 Express 不会返回任何东西。
试试这个:
const result = await client.get('foo')
if (result !== null) {
// it's a hit
} else {
// it's a miss
}
我正在尝试创建一个基本的缓存应用程序来测试 redis。我正在使用 Redis 版本:4.0.6.
首先我收到错误 clientclosederror: 客户端已关闭。
然后,在阅读文档后,我添加了
let client;
(async ()=> {
client = redis.createClient()
await client.connect()
})();
但是现在,在尝试 Postman 时,它只是挂起,没有返回任何响应
完整代码:
const express = require("express");
const redis = require("redis");
const axios = require('axios')
const app = express();
let client;
(async ()=> {
client = redis.createClient()
await client.connect()
})();
app.get('/result', async (req, res) => {
const searchTerm = req.query.name;
try {
await client.get(searchTerm, async (err, result) => {
console.log('cached called')
if (err) throw err;
if (result) {
res.status(200).send({
result: JSON.parse(result),
message: "data retrieved from the cache"
});
}
else {
const result = await axios.get(`https://api.agify.io/?name=${searchTerm}`);
await client.set(searchTerm, JSON.stringify(result.data));
return res.status(200).send({
result: result.data,
message: "cache miss"
});
}
})
} catch (error) {
console.log('get error', error)
return res.status(500).send({ message: error.message })
}
})
app.listen(process.env.PORT || 3000, () => {
console.log("Node server started");
});
client.get
不需要回调函数。它是异步的。我的猜测是它永远不会被调用,因此 Express 不会返回任何东西。
试试这个:
const result = await client.get('foo')
if (result !== null) {
// it's a hit
} else {
// it's a miss
}