Декораторы для Http сервера на uWebSockets.js
Не получается совместить декораторы.
Декоратор авторизации:
import { IsAuth } /* Промис авторизации */
import { HttpRequest, HttpResponse } from "uWebSockets.js";
export default function Authorized(role?: string) {
return (target: Object, propertyKey: string, descriptor: PropertyDescriptor) => {
const original = descriptor.value;
descriptor.value = async function (
res: HttpResponse,
req: HttpRequest,
...args: any[]
) {
let valid = true;
res.onAborted(() => (valid = false));
const auth = await IsAuth(req.getHeader("authorization")).catch((err) => {
if (valid) return res.writeStatus("401 Unauthorized").end(err);
});
if (auth) {
console.info("info: @Authorized." + propertyKey, args);
return original.apply(this, [res, req, ...args, auth]);
}
};
};
}
Декоратор считывания тела запроса:
import { readBody } /* Промис считывания тела запроса */
import { HttpRequest, HttpResponse } from "uWebSockets.js";
export default function JsonBody(maxPayloadLength = 512) {
return (target: Object, propertyKey: string, descriptor: PropertyDescriptor) => {
const original = descriptor.value;
descriptor.value = async function (
res: HttpResponse,
req: HttpRequest,
...args: any[]
) {
let valid = true;
res.onAborted(() => (valid = false));
const body = await readBody(res, maxPayloadLength).catch((err) => {
console.info("info: @JsonBody." + propertyKey, err);
});
if (body) {
console.log("body", body);
return original.apply(this, [res, req, ...args, JSON.parse(body)]);
}
};
};
}
По отдельности они работают, но при совмещении их вместе сервер замирает после этапа авторизации на считывании тела. Буду благодарен за какие нибудь примеры реализации или в чем моя ошибка.
@Authorized()
@JsonBody()
static Settings(res, req, user, body) {
// To Do...
}