gpt4 book ai didi

node.js - target.prototype 是类装饰器上的空对象

转载 作者:行者123 更新时间:2023-12-02 02:16:02 25 4
gpt4 key购买 nike

我正在尝试使用 Express 来实现装饰器(我不想下载任何包来执行此操作)。我按照指南编写了一个 Get 装饰器和一个 Controller 装饰器。但 Controller 装饰器中的目标是一个空对象。

Controller 装饰器

export function Controller(prefix: string) {
return function (target: Function) {
for (let key in target.prototype) {
const routeHandler = target.prototype[key];
const path = Reflect.getMetadata("path", target.prototype, key);
const method = Reflect.getMetadata("method", target.prototype, key);
const middlewares = Reflect.getMetadata(
"middlewares",
target.prototype,
key
);

if (path) {
console.log("has path"); //never logs out
router[method](`${prefix}${path}`, ...middlewares, routeHandler);
}
}
};
}

获取装饰器

export function Get(path: string) {
return function (target: any, key: string, desc: PropertyDescriptor) {
Reflect.defineMetadata("path", path, target, key);
Reflect.defineMetadata("method", "get", target, key);
};
}

最佳答案

通过类语法创建的方法/属性是不可枚举。因此,您需要使用 Object.getOwnPropertyNames() 返回所有属性(包括不可枚举属性)的数组

然后在您的情况下,您可能希望将现有的 for 循环转换为;

for(let key of Object.getOwnPropertyNames(target.prototype))

从现在开始Object.getOwnPropertyNames返回数组。

关于node.js - target.prototype 是类装饰器上的空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67161834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com