nextJS with custom proxy API


  • administrators

    Below is server.js which overwrites the default one. Note that I have to use

    const { createProxyMiddleware } = require("http-proxy-middleware");
    

    Instead of

        if (dev && devProxy) {
          const proxyMiddleware = require('http-proxy-middleware')
          Object.keys(devProxy).forEach(function(context) {
            server.use(proxyMiddleware(context, devProxy[context]))
          })
        }
    

    In this example: https://github.com/zeit/next.js/blob/canary/examples/with-custom-reverse-proxy/server.js

    /* eslint-disable no-console */
    const express = require("express");
    const next = require("next");
    const { createProxyMiddleware } = require("http-proxy-middleware");
    
    const devProxy = {
      "/api": {
        target: "http://localhost:3030",
        pathRewrite: { "^/api": "/" },
        changeOrigin: true
      }
    };
    
    const port = parseInt(process.env.PORT, 10) || 3000;
    const env = process.env.NODE_ENV ? process.env.NODE_ENV : "dev";
    console.log(env);
    const dev = env !== "production";
    const app = next({
      dir: ".", // base directory where everything is, could move to src later
      dev
    });
    
    const handle = app.getRequestHandler();
    
    let server;
    app
      .prepare()
      .then(() => {
        server = express();
    
        // Set up the proxy.
        if (dev && devProxy) {
          Object.keys(devProxy).forEach(function(context) {
            server.use(createProxyMiddleware(context, devProxy[context]));
          });
        }
    
        // Default catch-all handler to allow Next.js to handle all other routes
        server.all("*", (req, res) => handle(req, res));
    
        server.listen(port, err => {
          if (err) {
            throw err;
          }
          console.log(`> Ready on port ${port} [${env}]`);
        });
      })
      .catch(err => {
        console.log("An error occurred, unable to start the server");
        console.log(err);
      });
    
    

  • administrators

    I see it's due to different version of http-proxy-middleware being used.
    My version is ^1.0.3
    but the example uses ^0.17.4