❌ [ERROR] Error in ProxyController: Error inside ProxyWorker
✘ [ERROR] Error in ProxyController: Error inside ProxyWorker
{
name: 'Error',
message: 'Network connection lost.',
stack: 'Error: Network connection lost.'
}✘ [ERROR] Error in ProxyController: Error inside ProxyWorker
{
name: 'Error',
message: 'Network connection lost.',
stack: 'Error: Network connection lost.'
}I am using Hono.js. I encounter an error when repeatedly sending requests, around 10 requests per second, through a middleware. In this middleware, I check if the user's IP is exceed limit in KV and then pass them through the route. The error arises during this process.
Middleware
export const CheckLimitExceed = async (c: RequestT, next: Next) => {
try {
const { KV, ENVIRONMENT } = env<ENV>(c, 'workerd');
const ip =
ENVIRONMENT === 'development'
? '127.0.0.1'
: c.req.header('x-real-ip') || c.req.header('cf-connecting-ip');
const key = generateKvKey(ip);
if (!key) {
return c.json(
{
success: false,
err: true,
message: 'Bad Request',
},
400
);
}
const value = await KV.get(key);
if (!value) {
await KV.put(key, '1', { expirationTtl: expire_time });
await next();
return;
}
if (Number(value) >= PER_DAY_SHARING_LIMIT) {
return c.json(
{
success: false,
err: true,
message: `Limit exceeded for today. Please try again later.`,
},
403
);
}
await next();
} catch (err) {
return c.json(
{
success: false,
err: true,
message: 'Internal Server Error',
},
500
);
}
};export const CheckLimitExceed = async (c: RequestT, next: Next) => {
try {
const { KV, ENVIRONMENT } = env<ENV>(c, 'workerd');
const ip =
ENVIRONMENT === 'development'
? '127.0.0.1'
: c.req.header('x-real-ip') || c.req.header('cf-connecting-ip');
const key = generateKvKey(ip);
if (!key) {
return c.json(
{
success: false,
err: true,
message: 'Bad Request',
},
400
);
}
const value = await KV.get(key);
if (!value) {
await KV.put(key, '1', { expirationTtl: expire_time });
await next();
return;
}
if (Number(value) >= PER_DAY_SHARING_LIMIT) {
return c.json(
{
success: false,
err: true,
message: `Limit exceeded for today. Please try again later.`,
},
403
);
}
await next();
} catch (err) {
return c.json(
{
success: false,
err: true,
message: 'Internal Server Error',
},
500
);
}
};And pass that middleware like this:
Route
router.get('/example/:id', CheckLimitExceed, getData);router.get('/example/:id', CheckLimitExceed, getData);