GT-Manual / lib /application /WebSocketMethod.js
luoyutianyang's picture
Upload 786 files
ba2906a verified
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)
}
}()