Typeorm 不使用 ormconfig.json 文件

Posted

技术标签:

【中文标题】Typeorm 不使用 ormconfig.json 文件【英文标题】:Typeorm don't use ormconfig.json file 【发布时间】:2020-04-30 19:12:14 【问题描述】:

我正在配置nestjs ormconfig.json 但是typeorm 没有连接到mysql 8 数据库,它在cli 中显示这个

[Nest] 13324   - 2020-01-14 4:15:32   [NestFactory] Starting Nest application...
[Nest] 13324   - 2020-01-14 4:15:32   [InstanceLoader] AppModule dependencies initialized +513ms
[Nest] 13324   - 2020-01-14 4:15:32   [InstanceLoader] TypeOrmModule dependencies initialized +5ms
[Nest] 13324   - 2020-01-14 4:15:36   [TypeOrmModule] Unable to connect to the database. Retrying (1)... +4061ms
Error: Cannot find module 'src/user/user.entity'
Require stack:
- C:\Users\redwolf\Labs\projets-pro\kissing-api\src\appel\appel.entity.ts
- C:\Users\redwolf\Labs\projets-pro\kissing-api\node_modules\typeorm\platform\PlatformTools.js
- C:\Users\redwolf\Labs\projets-pro\kissing-api\node_modules\typeorm\driver\sqlserver\SqlServerDriver.js
- C:\Users\redwolf\Labs\projets-pro\kissing-api\node_modules\typeorm\migration\MigrationExecutor.js
- C:\Users\redwolf\Labs\projets-pro\kissing-api\node_modules\typeorm\connection\Connection.js
- C:\Users\redwolf\Labs\projets-pro\kissing-api\node_modules\typeorm\connection\ConnectionManager.js
- C:\Users\redwolf\Labs\projets-pro\kissing-api\node_modules\typeorm\index.js
- C:\Users\redwolf\Labs\projets-pro\kissing-api\node_modules\@nestjs\typeorm\dist\common\typeorm.utils.js
- C:\Users\redwolf\Labs\projets-pro\kissing-api\node_modules\@nestjs\typeorm\dist\common\typeorm.decorators.js
- C:\Users\redwolf\Labs\projets-pro\kissing-api\node_modules\@nestjs\typeorm\dist\common\index.js
- C:\Users\redwolf\Labs\projets-pro\kissing-api\node_modules\@nestjs\typeorm\dist\index.js
- C:\Users\redwolf\Labs\projets-pro\kissing-api\node_modules\@nestjs\typeorm\index.js
- C:\Users\redwolf\Labs\projets-pro\kissing-api\src\app.module.ts
- C:\Users\redwolf\Labs\projets-pro\kissing-api\src\main.ts
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:797:15)
    at Function.Module._load (internal/modules/cjs/loader.js:690:27)
    at Module.require (internal/modules/cjs/loader.js:852:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at Object.<anonymous> (C:\Users\redwolf\Labs\projets-pro\kissing-api\src\appel\appel.entity.ts:3:1)
    at Module._compile (internal/modules/cjs/loader.js:959:30)
    at Module.m._compile (C:\Users\redwolf\Labs\projets-pro\kissing-api\node_modules\ts-node\src\index.ts:806:23)
    at Module._extensions..js (internal/modules/cjs/loader.js:995:10)
    at Object.require.extensions.<computed> [as .ts] (C:\Users\redwolf\Labs\projets-pro\kissing-api\node_modules\ts-node\src\index.ts:809:12)
    at Module.load (internal/modules/cjs/loader.js:815:32)

所有实体都在 src 文件夹中,但控制台仍然说不是

这是我的代码

app.module.ts

import  Module  from '@nestjs/common';
import  TypeOrmModule  from '@nestjs/typeorm';

@Module(
  imports: [
      TypeOrmModule.forRoot(),
  ],
)
export class AppModule 

ormconfig.json


  "type": "mysql",
  "host": "localhost",
  "port": 3306,
  "username": "admin",
  "password": "",
  "database": "kissing_db",
  "synchronize": true,
  "logging": true,
  "entities": [
    "src/**/*.entity.ts",
    "dist/**/*.entity.js"
  ],
  "migrationsTableName": "migration",
  "migrations": [
    "src/migration/*.ts"
  ],
  "cli": 
    "migrationsDir": "./src/migration"
  ,
  "ssl": false

出于安全原因,我不会使用密码发布它,希望您能理解。

【问题讨论】:

【参考方案1】:

从 Typescript 编译到 javascript 时,您的代码会从 src 目录中的 .ts 文件移动到 dist 目录中的 .js 文件。从那里,Node 仍然尝试解析从您的基本目录给出的路径(一旦在dist 中,基本是dist),因此它尝试解析显然不存在的dist/src/user/user.entity。相反,您应该从ormconfig.json 中删除src/**/*.entity.ts,以便它只查找已编译的JavaScript 文件。

There's a bit more information here.

【讨论】:

但是开发模式怎么办? 我已更改从我的ormconfig.json 文件中删除src/**/*.entity.ts,但我在cli Entity metadata for CaracteristiqueUser#photos was not found. Check if you specified a correct entity object and if it's connected in the connection options 中仍然有此错误 这是我的 package.json 启动脚本"scripts": "start": "tsc-watch -r tsconfig-paths/register src/main.ts", "start:dev": "nodemon", "start:debug": "nest start --debug --watch", "start:prod": "node dist/main", , 用你的nodemon,你是在编译ts还是在使用ts-node 我使用 nodemon.json 文件 "watch": ["src"], "ext": "ts", "ignore": ["src/**/*.spec.ts"], "exec": "node --inspect=127.0.0.1:9223 -r ts-node/register -- src/main.ts", "env": 【参考方案2】:

我想我已经找到了一个解决方案,我只是创建了一个 ormconfig.js 而没有像这样的 entities 字段

module.exports = 
   "type": "mysql",
   "host": "localhost",
   "port": 3306,
   "username": "admin",
   "password": "",
   "database": "kissing_db",
   "synchronize": true,
   "logging": true,
;

并用ts-node编辑我的package.json启动脚本,好像ts-node会自动查找实体文件。

【讨论】:

以上是关于Typeorm 不使用 ormconfig.json 文件的主要内容,如果未能解决你的问题,请参考以下文章

NestJS TypeORM mongodb 在数组列中查找不起作用

TypeORM 命令不返回任何内容

TypeORM/NestJS 中的分页

当电子 ABI 与已安装节点不同时,无法生成 TypeORM 迁移

TypeORM getRepository.find() 不包括外键字段

NestJS、PortsgreSQL 和 TypeORM - 迁移运行不正常