factory-hono.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import { createProxyMiddleware } from './index.js';
  2. import { getLogger } from './logger.js';
  3. /**
  4. * Creates a Hono middleware that proxies requests using http-proxy-middleware.
  5. *
  6. * @remarks
  7. * This middleware requires Hono to be running on Node.js via `@hono/node-server`.
  8. * It uses `c.env.incoming` and `c.env.outgoing` which are only available with `HttpBindings`.
  9. *
  10. * @experimental This API is experimental and may change without a major version bump.
  11. *
  12. * @example
  13. * ```ts
  14. * import { serve } from '@hono/node-server';
  15. * import { Hono } from 'hono';
  16. * import { createHonoProxyMiddleware } from 'http-proxy-middleware/hono';
  17. *
  18. * const app = new Hono();
  19. * app.use('/api', createHonoProxyMiddleware({ target: 'http://example.com', changeOrigin: true }));
  20. * serve(app);
  21. * ```
  22. *
  23. * @since 4.0.0
  24. */
  25. export function createHonoProxyMiddleware(options) {
  26. const proxy = createProxyMiddleware(options);
  27. const logger = getLogger(options);
  28. return (c, next) => {
  29. return new Promise((resolve, reject) => {
  30. proxy(c.env.incoming, c.env.outgoing, (err) => {
  31. if (err) {
  32. reject(err);
  33. }
  34. else {
  35. resolve();
  36. }
  37. });
  38. })
  39. .then(() => next())
  40. .catch((err) => {
  41. logger.error('Proxy error:', err);
  42. return c.text('Proxy Error', 500);
  43. });
  44. };
  45. }