Spaces:
Sleeping
Sleeping
File size: 1,056 Bytes
ba2906a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
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)
}
}()
|