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
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)
- This function is supported by Next.js. No additional libraries need to be installed!
// next.config.js async rewrites() { return [ { source: "/api/:path*", destination: "http://example.com/api/:path*", }, ]; },
Try using Http-Proxy
next-http-proxy-middlewareis implemented usinghttp-proxyinternally. Since the implementation is not complicated, it is recommended to tryhttp-proxydirectly.// 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-middlewareAlternately, download the source.
git clone https://github.com/stegano/next-http-proxy-middleware.gitFeatures
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.patternStrreplace the URL string with the valuepathRewrite.replaceStr.
onProxyInit option
You can access the
http-proxyinstance using theonProxyInitoption. See the example below.import type { NextApiRequest, NextApiResponse } from "next"; import type { NextHttpProxyMiddlewareOptions } from "next-http-proxy-middleware"; import httpProxyMiddleware from "next-http-proxy-middleware"; const handleProxyInit: NextHttpProxyMiddlewareOptions["onProxyInit"] = (proxy) => { /** * 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 import type { NextApiRequest, NextApiResponse } from "next"; import httpProxyMiddleware from "next-http-proxy-middleware"; const isDevelopment = process.env.NODE_ENV !== "production"; 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) );
externalResolveris an explicit flag that tells the server that this route is being handled by an external resolver. Enabling this option disables warnings for unresolved requests.
Using multipart/form-data
- If you are using the
multipart/form-data, refer to the Issues below
Other projects
- ReactRenderStateHook
react-render-state-hookis a React hook that enables declarative management of components based on data processing states. It facilitates straightforward state management and data sharing among multiple components in a React.
Contributors ✨
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!