JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 55151
  • Score
    100M100P100Q151681F
  • License MIT

Nextjs HTTP Proxy Middleware

Package Exports

  • next-http-proxy-middleware
  • next-http-proxy-middleware/build/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (next-http-proxy-middleware) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Next.js HTTP Proxy Middleware

NPM License NPM Downloads All Contributors

HTTP Proxy middleware available in API Middleware provided by Next.js.

⭐️ Before using

Please try the solutions below before using this library. 😀

Try using Next.js Rewrites(recommended)

Try using Http-Proxy

  • next-http-proxy-middleware is implemented using http-proxy internally. Since the implementation is not complicated, it is recommended to try http-proxy directly.
    // pages/api/[...all].ts
    import httpProxy from "http-proxy";
    
    export const config = {
      api: {
        // Enable `externalResolver` option in Next.js
        externalResolver: true,
        bodyParser: false,
      },
    };
    
    export default (req, res) =>
      new Promise((resolve, reject) => {
        const proxy: httpProxy = httpProxy.createProxy();
        proxy.once("proxyRes", resolve).once("error", reject).web(req, res, {
          changeOrigin: true,
          target: process.env.NEXT_PUBLIC_API_PROXY_URL,
        });
      });

Installation

The easiest way to install next-http-proxy-middleware is with npm.

npm install next-http-proxy-middleware

Alternately, download the source.

git clone https://github.com/stegano/next-http-proxy-middleware.git

Features

This middleware is implemented using the http-proxy library. You can use the existing options provided by http-proxy. And you can rewrite the api path using pathRewrite, an additional option provided by this middleware.

pathRewrite option

  • Replaces URL information matching the pattern with another string.
    • Priority is determined in the order entered in the array.
    • If the request URL matches the pattern pathRewrite.patternStr replace the URL string with the value pathRewrite.replaceStr.

onProxyInit option

  • You can access the http-proxy instance using the onProxyInit option. See the example below.

    const handleProxyInit = (proxy: httpProxy) => {
      /**
       * Check the list of bindable events in the `http-proxy` specification.
       * @see https://www.npmjs.com/package/http-proxy#listening-for-proxy-events
       */
      proxy.on('proxyReq', (proxyReq, req, res) => {
        ...
      });
      proxy.on('proxyRes', (proxyRes, req, res) => {
        ...
      });
    };
    
    export default async (req: NextApiRequest, res: NextApiResponse) 
      => httpProxyMiddleware(req, res, {
        ...
        target: 'http://example.com',
        onProxyInit: handleProxyInit,
      }
    );

Example

  • Refer to the following for how to use Next.js API Middleware

    // pages/api/[...all].ts
    export const config = {
      api: {
        // Enable `externalResolver` option in Next.js
        externalResolver: true,
      },
    }
    
    export default (req: NextApiRequest, res: NextApiResponse) => (
      isDevelopment
        ? httpProxyMiddleware(req, res, {
          // You can use the `http-proxy` option
          target: 'https://www.example.com',
          // In addition, you can use the `pathRewrite` option provided by `next-http-proxy-middleware`
          pathRewrite: [{
            patternStr: '^/api/new',
            replaceStr: '/v2'
          }, {
            patternStr: '^/api',
            replaceStr: ''
          }],
        })
        : res.status(404).send(null)
    );

Using multipart/form-data

Contributors ✨

Thanks goes to these wonderful people (emoji key):


Denny Lim

🐛 💻

Kristian Tryggestad

🐛 💻

Gunnlaugur Thor Briem

💻 🤔

Otto von Wesendonk

🛡️

Daniel Silva

🤔

Yann Pringault

💻

Lorenzo

📖

Timon Grassl

🐛

Abhinav Kumar

📖

Jack Cuthbert

📖

Vytenis

📖

Dario Varotto

📖

johannbrynjar

🐛 💻

This project follows the all-contributors specification. Contributions of any kind welcome!