Skip to content

Commit

Permalink
fix(logger-plugin): fix missing target port (#989)
Browse files Browse the repository at this point in the history
* fix(logger-plugin): fix missing target port
* refactor(logger-plugin): improve req type
* docs(CHANGELOG.md): update changelog
  • Loading branch information
chimurai committed Apr 20, 2024
1 parent bffa0a6 commit e644a22
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 3 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -4,6 +4,7 @@

- fix(type): fix RequestHandler return type
- refactor(errors): improve pathFilter error message
- fix(logger-plugin): fix missing target port

## [v3.0.0](https://github.com/chimurai/http-proxy-middleware/releases/tag/v3.0.0)

Expand Down
25 changes: 23 additions & 2 deletions src/plugins/default/logger-plugin.ts
@@ -1,5 +1,20 @@
import { URL } from 'url';
import { Plugin } from '../../types';
import { getLogger } from '../../logger';
import type { IncomingMessage } from 'node:http';

type ExpressRequest = {
/** Express req.baseUrl */
baseUrl?: string;
};

type BrowserSyncRequest = {
/** BrowserSync req.originalUrl */
originalUrl?: string;
};

/** Request Types from different server libs */
type FrameworkRequest = IncomingMessage & ExpressRequest & BrowserSyncRequest;

export const loggerPlugin: Plugin = (proxyServer, options) => {
const logger = getLogger(options);
Expand All @@ -22,11 +37,17 @@ export const loggerPlugin: Plugin = (proxyServer, options) => {
* [HPM] GET /users/ -> http://jsonplaceholder.typicode.com/users/ [304]
* ```
*/
proxyServer.on('proxyRes', (proxyRes: any, req: any, res) => {
proxyServer.on('proxyRes', (proxyRes: any, req: FrameworkRequest, res) => {
// BrowserSync uses req.originalUrl
// Next.js doesn't have req.baseUrl
const originalUrl = req.originalUrl ?? `${req.baseUrl || ''}${req.url}`;
const exchange = `[HPM] ${req.method} ${originalUrl} -> ${proxyRes.req.protocol}//${proxyRes.req.host}${proxyRes.req.path} [${proxyRes.statusCode}]`;

// construct targetUrl
const target = new URL(options.target as URL);
target.pathname = proxyRes.req.path;
const targetUrl = target.toString();

const exchange = `[HPM] ${req.method} ${originalUrl} -> ${targetUrl} [${proxyRes.statusCode}]`;
logger.info(exchange);
});

Expand Down
4 changes: 3 additions & 1 deletion test/e2e/http-proxy-middleware.spec.ts
Expand Up @@ -459,7 +459,9 @@ describe('E2E http-proxy-middleware', () => {

expect(logMessages).not.toBeUndefined();
expect(logMessages.length).toBe(1);
expect(logMessages[0]).toBe('[HPM] GET /api/foo/bar -> http://localhost/api/foo/bar [200]');
expect(logMessages.at(0)).toBe(
`[HPM] GET /api/foo/bar -> http://localhost:${mockTargetServer.port}/api/foo/bar [200]`,
);
});
});
});
Expand Down

0 comments on commit e644a22

Please sign in to comment.