方法的装饰器 target打印出来为{},在for循环中console.log(Reflect.getMetadata(‘path‘, target.prototype, key))无法打印出来

1、 两种装饰器 get是方法装饰器 target对应的是相应类的原型prototype controller是类的装饰器 target对应的是构造函数 但是在两个装饰器中console.log(target)与console.log(target.prototype)打印出来的都为{}, 这也导致了
console.log(Reflect.getMetadata(‘path’, target, key))无法打印, 因为for循环中target.prototype为空对象不能遍历。
当运行不报错的情况,只需要在tsconfig.json文件中把"target": “es2016” 改为 “target” : "es5"就可以了
当然这两个配置是一定要打开的
“experimentalDecorators”: true,
“emitDecoratorMetadata”: true,

import 'reflect-metadata';
import { Request, Response } from 'express'
// import {controller, get} from './decorator'
interface BodyRequest extends Request {
  body: {
    [key: string] : string | undefined;
  }
}


export function controller(target: any) {
  console.log(target.prototype);
  for (let key in target.prototype) {
    console.log(Reflect.getMetadata('path', target.prototype, key));
  }
}

export function get(path: string) {
  return function(target:any, key: string) {
    Reflect.defineMetadata('path', path, target, key);
    console.log(target);
  };
}
@controller
class LoginController {
  @get('/login')
  login () {

  }
  @get('/')
  home(req: BodyRequest, res: Response) {
    const isLogin = req.session ? req.session.login : undefined;
    if (isLogin) {
      res.send(`
          <html>
            <body>
              <a href= '/logout'> 退出 </a>
              <a href= '/getData'> 爬取信息 </a>
              <a href= '/showData'> 展示爬取信息 </a>
            </body>
          </html>
        `)
    } else {
      res.send(`
          <html>
            <body>
              <form method = 'post' action = '/login'>
                <input type= "password" name = "password"/>
                <button> 登录 </button>
              </form>
            </body>
          </html>
        `)
    }
  }
}


在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值