-
-
Save ucw/67f7291c64777fb24341e8eae72bcd24 to your computer and use it in GitHub Desktop.
Nuxt 3 websocket proxy module
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { defineNuxtModule, logger } from "@nuxt/kit"; | |
import { IncomingMessage } from "http"; | |
import { createProxyServer } from "http-proxy"; | |
import internal from "stream"; | |
export default defineNuxtModule({ | |
defaults: { | |
target: "", | |
path: "/v1/graphql", | |
}, | |
meta: { | |
configKey: "websocketProxy", | |
name: "Websocket proxy", | |
}, | |
setup(resolvedOptions, nuxt) { | |
if (!nuxt.options.dev || !resolvedOptions.target) { | |
return; | |
} | |
nuxt.hook("listen", (server) => { | |
const proxy = createProxyServer({ | |
ws: true, | |
secure: false, | |
changeOrigin: true, | |
target: resolvedOptions.target, | |
}); | |
const proxyFn = (req: IncomingMessage, socket: internal.Duplex, head: Buffer) => { | |
if (req.url && req.url.startsWith(resolvedOptions.path)) { | |
proxy.ws(req, socket, head); | |
} | |
}; | |
server.on("upgrade", proxyFn); | |
nuxt.hook("close", () => { | |
server.off("upgrade", proxyFn); | |
proxy.close(); | |
}); | |
logger.info(`Websocket dev proxy started on ${resolvedOptions.path}`); | |
}); | |
}, | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi! 👋 Would you mind putting this under an open source license, say the MIT license (which Nuxt uses). Thanks!