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 在数组列中查找不起作用
当电子 ABI 与已安装节点不同时,无法生成 TypeORM 迁移