使用 redis 客户端时未发回响应
Response is not being sent back when using redis client
为什么在任何情况下(缓存命中或未命中)都没有发送回响应?我也没有收到任何错误。
我正在尝试建立一个简单的基于 redis 的项目。
import express from "express";
import axios from "axios";
let app = express();
import logger from "morgan";
import { createClient } from "redis";
const client = createClient();
await client.connect();
app.use(express.json());
app.use(logger("dev"));
app.get("/photos", async function (req, res) {
await client.get("photos", async (err, photos) => {
if (err) return next(err);
if (photos !== null) return res.json(JSON.parse(photos));
const { data } = await axios.get(
"https://jsonplaceholder.typicode.com/photos"
);
await client.setEx("photos", JSON.stringify(data));
res.json(data);
});
});
问题在于您将回调功能与较新的 async/await 逻辑混合在一起。根据 npm-redis 文档,访问键值的方法是 await client.get()
app.get("/photos", async function (req, res) {
const photos = await client.get("photos");
if (photos) {
res.json(JSON.parse(photos))
} else {
try {
const { data } = await axios.get(
"https://jsonplaceholder.typicode.com/photos"
);
await client.setEx("photos", JSON.stringify(data));
res.json(data);
} catch(error) {
console.error(error)
res.json({data: error})
}
}
});
我还在对 axios.get
的调用周围添加了一个 try/catch 块,以尝试捕获来自调用的任何错误以及 return 响应中的错误
为什么在任何情况下(缓存命中或未命中)都没有发送回响应?我也没有收到任何错误。 我正在尝试建立一个简单的基于 redis 的项目。
import express from "express";
import axios from "axios";
let app = express();
import logger from "morgan";
import { createClient } from "redis";
const client = createClient();
await client.connect();
app.use(express.json());
app.use(logger("dev"));
app.get("/photos", async function (req, res) {
await client.get("photos", async (err, photos) => {
if (err) return next(err);
if (photos !== null) return res.json(JSON.parse(photos));
const { data } = await axios.get(
"https://jsonplaceholder.typicode.com/photos"
);
await client.setEx("photos", JSON.stringify(data));
res.json(data);
});
});
问题在于您将回调功能与较新的 async/await 逻辑混合在一起。根据 npm-redis 文档,访问键值的方法是 await client.get()
app.get("/photos", async function (req, res) {
const photos = await client.get("photos");
if (photos) {
res.json(JSON.parse(photos))
} else {
try {
const { data } = await axios.get(
"https://jsonplaceholder.typicode.com/photos"
);
await client.setEx("photos", JSON.stringify(data));
res.json(data);
} catch(error) {
console.error(error)
res.json({data: error})
}
}
});
我还在对 axios.get
的调用周围添加了一个 try/catch 块,以尝试捕获来自调用的任何错误以及 return 响应中的错误