Spaces:
Sleeping
Sleeping
| import url from 'node:url' | |
| import { modifyUrl } from '../service/util.js' | |
| export default new class WebSocketMethod { | |
| handle ({ app, handler }) { | |
| app.ws = (route, ...middlewares) => { | |
| let path = route | |
| if (typeof route == 'function') { | |
| path = '/' | |
| middlewares = [route, ...middlewares] | |
| } | |
| if (middlewares.length == 1 && Array.isArray(middlewares[0])) { | |
| middlewares = middlewares[0] | |
| } | |
| middlewares.forEach(this.middlewareEach.bind({ handler, path })) | |
| return app | |
| } | |
| } | |
| middlewareEach (middleware, idx) { | |
| let fn = (socket, request, next) => { | |
| if (request.ws) { | |
| /* eslint-disable n/no-deprecated-api */ | |
| let urlObj = url.parse(request.url, true) | |
| request.query = urlObj.query | |
| request.wsHandled = true | |
| try { | |
| middleware(socket, request, next) | |
| } catch (err) { | |
| next(err) | |
| } | |
| } else { | |
| next() | |
| } | |
| } | |
| /** 不走app.handle */ | |
| this.handler.add(modifyUrl(this.path), fn, idx) | |
| } | |
| }() | |