Open
Description
I was using this module like so:
import httpProxyMiddleware from 'next-http-proxy-middleware';
import { NextApiRequest, NextApiResponse } from 'next';
import { getSession } from '@auth0/nextjs-auth0';
import * as Sentry from '@sentry/node';
import { initSentry } from 'src/utils/sentry';
export default async (req: NextApiRequest, res: NextApiResponse) => {
const session = getSession(req, res);
return new Promise((resolve) =>
httpProxyMiddleware(req, res, {
target: process.env.NEXT_PUBLIC_API_BASE_URL,
headers: { Authorization: `Bearer ${session?.idToken}`, 'Content-Type': 'application/json-patch+json' },
}).catch(async (error) => {
initSentry();
Sentry.captureException(error);
await Sentry.flush(2000);
return resolve(error);
})
);
};
And as you can see in memory usage graph it is spikes and some server restarts.
But when I switched to middleware like so
import { NextApiRequest, NextApiResponse } from 'next';
import { getSession } from '@auth0/nextjs-auth0';
import { createProxyMiddleware } from 'http-proxy-middleware';
import * as Sentry from '@sentry/node';
import { initSentry } from 'src/utils/sentry';
export const config = {
api: {
bodyParser: false,
externalResolver: true,
},
};
export default createProxyMiddleware({
target: process.env.NEXT_PUBLIC_API_BASE_URL,
headers: {
'Content-Type': 'application/json-patch+json',
},
selfHandleResponse: false,
changeOrigin: true,
xfwd: true,
secure: true,
proxyTimeout: 3000,
ws: true,
onProxyReq: (proxyReq, req: Request & NextApiRequest, res: Response & NextApiResponse) => {
proxyReq.setHeader('Authorization', `Bearer ${getSession(req, res)?.idToken}`);
},
onError: (err, req: Request & NextApiRequest, res: Response & NextApiResponse) => {
initSentry();
Sentry.captureException(err);
Sentry.flush(2000);
res.end('Something went wrong.');
},
});
the memory usage becomes stable. Also got correct response headers from API like 404