You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Node.js应用中使用TypeORM创建实体时遭遇SyntaxError错误求助

解决Node.js JavaScript应用中TypeORM装饰器语法报错问题

错误原因

@Entity这类装饰器属于TypeScript/ES提案特性,Node.js默认的JavaScript解析器无法识别该语法,因此抛出「Invalid or unexpected token」错误。你当前在JS文件中使用了仅TypeScript或经过转译才支持的装饰器语法,导致解析失败。

解决方案

方案1:改用TypeScript(推荐)

这是TypeORM官方推荐的使用方式,能原生支持装饰器语法:

  1. 安装TypeScript及类型依赖:
    npm install typescript @types/node --save-dev
    
  2. 初始化TypeScript配置文件:
    npx tsc --init
    
  3. 修改tsconfig.json中的关键配置:
    {
      "target": "ES2020",
      "module": "CommonJS",
      "experimentalDecorators": true,
      "emitDecoratorMetadata": true,
      "outDir": "./dist",
      "rootDir": "./src"
    }
    
  4. 将你的.js文件重命名为.ts后缀(比如user.entity.ts、data-source.ts)
  5. 编译并运行:
    npx tsc && node dist/data-source.js
    

方案2:在纯JavaScript中启用装饰器支持

如果坚持使用纯JS,需要通过Babel转译代码:

  1. 安装Babel相关依赖:
    npm install @babel/core @babel/node @babel/plugin-proposal-decorators @babel/plugin-proposal-class-properties --save-dev
    
  2. 创建babel.config.json配置文件:
    {
      "plugins": [
        ["@babel/plugin-proposal-decorators", { "legacy": true }],
        ["@babel/plugin-proposal-class-properties", { "loose": true }]
      ]
    }
    
  3. 使用babel-node运行你的入口文件:
    npx babel-node src/data-source.js
    

方案3:使用TypeORM的非装饰器写法(纯JS原生兼容)

无需转译,直接用TypeORM提供的JS风格实体定义:
修改你的User实体文件,替换装饰器为手动元数据配置:

import { EntitySchema } from "typeorm";

export const User = new EntitySchema({
  name: "application_users",
  columns: {
    id: {
      type: String,
      primary: true
    },
    biography: {
      type: String
    },
    country: {
      type: String
    },
    email: {
      type: String
    },
    image: {
      type: String
    }
  }
});

然后在DataSource中直接引入这个User实体即可正常运行。


内容的提问来源于stack exchange,提问作者GodLike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:39:20