Skip to content

Errors in prepareProxyRequest not handled for websockets #822

@nwalters512

Description

@nwalters512

Checks

Describe the bug (be clear and concise)

The callsites of handleUpgrade do not handle errors thrown from prepareProxyRequest. For a user, this means that any error thrown in router or pathRewrite will result in an unhandledRejection.

We can see that the two call sites for handleUpgrade neither await the returned promise, nor use .catch() to handle errors:

this.handleUpgrade(req, socket, head);

server.on('upgrade', this.handleUpgrade);

Step-by-step reproduction instructions

Add a router or pathRewrite function that throws an error, then try to make a websocket request. Observe that the error is not handled. E.g., if you add an onError handler to the proxy config, it is not called, and if you process.on('unhandledRejection', (e) => console.error(e)), that error is logged.

Expected behavior (be clear and concise)

onError should be invoked so that I can handle the error appropriately.

How is http-proxy-middleware used in your project?

It is installed as a direct dependency.

What http-proxy-middleware configuration are you using?

Here's a pared-down version:

const options = {
  router: async () => {
    throw new Error('testing');
  },
  onError: (err, req, res) => {
    // Not called for websocket requests
    res.status(500).send();
  },
};

What OS/version and node/version are you seeing the problem?

macOS 12.5.1; Node v16.17.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions