Node.js使用routing-controller报Reflect.getMetadata is not a function错误求解
错误原因
routing-controller框架依赖TypeScript装饰器的元数据反射能力,Reflect.getMetadata不属于Node.js/ECMAScript原生API,缺少对应的polyfill就会触发该报错。
修复步骤
- 第一步:安装
reflect-metadata依赖# npm安装 npm install reflect-metadata # yarn安装 yarn add reflect-metadata # pnpm安装 pnpm add reflect-metadata - 第二步:在项目入口文件最顶部引入polyfill,必须保证这行代码在所有其他业务代码、框架引入代码之前执行,示例(入口为app.ts时):
// 必须是第一行有效代码 import 'reflect-metadata' // 再引入其他模块 import { createExpressServer } from 'routing-controllers' - 第三步:检查tsconfig.json配置,确保开启装饰器和元数据生成开关:
{ "compilerOptions": { "experimentalDecorators": true, "emitDecoratorMetadata": true } }
常见踩坑说明
如果完成以上步骤依然报错,检查是否存在reflect-metadata引入顺序晚于routing-controller引入的情况,只要有任意文件在导入reflect-metadata之前导入了routing-controller相关代码,都会触发该错误。
内容的提问来源于stack exchange,提问作者Jenish MS
相关产品推荐
相关产品推荐

