In my Nuxt 3 app, I use Redis to count page views. All works well, except that I get unhandled errors when Redis is not running. So, here's the question - how to handle connection errors with useStorage()
and Redis?
I have read Nuxt 3 and Nitro docs, found nothing relevant...
Here's my code:
// server/api/viewCount.get.ts
export default defineEventHandler(async (event) => {
const query = getQuery(event);
const pageId: string = query.pageId as string;
const redisKey: string = `viewCount:${pageId}`;
let viewCount = 1;
const redis = useStorage("redis");
const data = await redis.getItem(redisKey);
if (data) viewCount = Number(data.toString()) + 1;
await redis.setItem(redisKey, viewCount);
return viewCount;
});
// api.ts
export async function useViewCount(pageId: string) {
const { data: viewCount } = await useFetch(`/api/viewCount?pageId=${pageId}`);
return viewCount;
}
When Redis is down, I get these errors:
[ioredis] Unhandled error event: Error: getaddrinfo ENOTFOUND redis 8:34:56 AM
at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:107:26) (repeated 14 times)
[ioredis] Unhandled error event: Error: getaddrinfo ENOTFOUND redis 8:35:06 AM
at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:107:26)
[nuxt] [request error] [unhandled] [500] Reached the max retries per request limit (which is 20). Refer to "maxRetriesPerRequest" option for details. 8:35:06 AM
at Socket.<anonymous> (./node_modules/ioredis/built/redis/event_handler.js:182:37)
at Object.onceWrapper (node:events:628:26)
at Socket.emit (node:events:513:28)
at TCP.<anonymous> (node:net:322:12)