【个人笔记】Nestjs使用TypeORM注意点
在Nestjs使用TypeORM还是有一些注意点。
entities路径配置注意点
在nestjs中使用TypeORM,需要配置数据库连接(以MySQL为例)。需要特别注意的是配置参数里面的entities字段:
{
    "type": "mysql",
    "host": "localhost",
    "port": 3306,
    "username": "root",
    "password": "root",
    "database": "zen-im",
    "entities": ["**/*.entity.{ts,js}"],
    "synchronize": true
}
entities字段的作用是根据提供的路径字符串,在运行的时候查找对应路径下的entity文件。
首先,我建议最好直接在使用 TypeORM.forRoot 来引入配置,就像下面一样:
// app.module.ts
const entitiesPaths = [join(__dirname, '..', '**', '*.entity.{ts,js}')]
@Module({
    imports: [
        TypeOrmModule.forRoot({
                "type": "mysql",
                "host": "localhost",
                "port": 3306,
                "username": "root",
                "password": "root",
                "database": "zen-im",
                "entities": entitiesPaths,
                "synchronize": true
            }
        )],
    controllers: [AppController],
    providers: [AppService],
})
export class AppModule {
}
这样做的原因在于,能够控制entities的搜索路径。在上面例子中,我控制的路径是当前运行js路径(__dirname)的上一层(..)目录中的任意(**)子目录中,搜索所有的以.entity.js或.entity.ts作为后缀的文件作为扫描为entity文件。
之所以使用了上一层(..),是因为我的项目中,上面这个app.module.ts放在了src/module目录下,而我的所有entity.ts都在放在src/entity这个目录下:
src
 - module
   - app.module.ts
 - entity
   - user
     - user.entity.ts
最终生成出来的js代码,会放在项目根目录/dist目录下:
dist
 - module
   - app.module.js
 - entity
   - user
     - user.entity.js
所以在实际运行中,app.module.js中配置entities这个字段的时候,需要返回上一层(..),才能查找到。如果你的项目中,app.module.ts就在src目录下,entity存放路径就在app.module.ts所在的子目录,就可以直接配置成:
join(__dirname, '**', "*.entity.{js,ts}")
如果这个路径配置不一致,运行的时候,会出现以下的错误:
- EntityMetadataNotFoundError: No metadata for "你的Entity" was found.
Entity列配置注意点
这个地方比较细节,笔者编写代码的时候,按照曾经Java的MyBatis-Plus注解使用,给字段添加列定义的时候。不小心直接把名称字符串作为参数:
import {Column, Entity, PrimaryColumn} from "typeorm";
@Entity('user')
export class UserPo {
    /**
     * 全局唯一ID
     */
    @PrimaryColumn('uid')
    uid: string;
    /**
     * 用户名
     */
    @Column('name')
    name: string;
}
运行的时候,就出现了:
- DataTypeNotSupportedError: Data type "uid" in "UserPo.uid" is not supported by "mysql" database.
原因在于装饰器@PrimaryColumn或者@Column的参数如果是一个字符串,则视为一个数据库的类型!要传一个对象,这个对象有个name字段,来表示列名:
import {Column, Entity, PrimaryColumn} from "typeorm";
@Entity('user')
export class UserPo {
    /**
     * 没有业务逻辑含义的全局唯一ID
     */
-    @PrimaryColumn('uid')
+    @PrimaryColumn({
+        name: 'uid'
+    })
    uid: string;
    /**
     * 用户名
     */
-    @Column('name')
+    @Column({
+       name: 'name'
+   })
    name: string;
}
【个人笔记】Nestjs使用TypeORM注意点的更多相关文章
- nestjs中typeorm进行事物操作
		https://typeorm.io/#/transactions 两种方法 
- NodeMan架构
		在上一篇文章中我们介绍了NodeMan的基本概念,介绍了这是一套利用NodeJs框架来管理Ubuntu服务器的解决方案,接下来我们会继续介绍关于这样一套解决方案更多细节的内容. 后台: 使用node作 ... 
- 开源低代码平台开发实践二:从 0 构建一个基于 ER 图的低代码后端
		前后端分离了! 第一次知道这个事情的时候,内心是困惑的. 前端都出去搞 SPA,SEO 们同意吗? 后来,SSR 来了. 他说:"SEO 们同意了!" 任何人的反对,都没用了,时代 ... 
- Nest  +  typeorm
		1\ Nest (https://nestjs.com/) is a framework for building efficient, scalable Node.js web appli ... 
- Nestjs 身份验证
		文档 yarn add @nestjs/passport passport passport-http-bearer @nestjs/jwt passport-jwt auth.service.ts ... 
- Nestjs 链接mysql
		文档 下插件 λ yarn add @nestjs/typeorm typeorm mysql 创建 cats模块, 控制器,service λ nest g mo cats λ nest g co ... 
- GraphQL介绍&使用nestjs构建GraphQL查询服务
		GraphQL介绍&使用nestjs构建GraphQL查询服务(文章底部附demo地址) GraphQL一种用为你 API 而生的查询语言.出自于Facebook,GraphQL非常易懂,直接 ... 
- NestJS  用TypeScript开发 nodeJS后端
		NestJS A progressive Node.js framework for building efficient and scalable server-side applications ... 
- 在 Nest.js 中使用 MongoDB 与 TypeORM
		在 Nest.js 中使用 MongoDB 与 TypeORM 首先要在 database 文件夹里建立DatabaseModule模块文件, // database/database.module. ... 
- git-简单流程(学习笔记)
		这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ... 
随机推荐
- Java集合篇之深入解析ArrayList,这六问你答的上来吗?
			写在开头 开年第一篇,先祝各位新的一年身体健康,学业有成,事业有成哈,春节期间就是咔咔乱吃,咔咔乱玩,把学习都抛一边子去了,已经9天没有学习了,深深的懊悔,从今天开始,2024年的学习正式开启,一起给 ... 
- 解决Oracle创建空间索引报错ORA-29855,ORA-13249,ORA-29400,ORA-01426
			问题描述 公司这边用了Oracle Spatial来存储GIS数据信息,今天在某表上创建空间索引时报了下面的错: 此处举例说明: 假如有表TEST,其中有一列SHAPE存储维度信息. CREATE I ... 
- 学习go语言编程之常量
			什么在常量 在Golang中,常量是指在编译期就已知且不可改变的值. 字面常量 在程序中硬编码的常量值被称为字面常量,如: -12 // 整数类型常量 3.1415926 // 浮点类型常量 3.2+ ... 
- Docker方式快速启动一个Redis实例
			安装Redis有多种方式,除了可以通过各个平台的软件包工具安装外,还可以直接从源码安装. 但是,安装Redis可能会遇到一些这样的问题,比如: 1.网络环境比较差,下载耗时比较长 2.从源码编译安装时 ... 
- 面试官:说一下红锁RedLock的实现原理?
			RedLock 是一种分布式锁的实现算法,由 Redis 的作者 Salvatore Sanfilippo(也称为 Antirez)提出,主要用于解决在分布式系统中实现可靠锁的问题.在 Redis 单 ... 
- 【Azure 应用服务】Storage Queue触发Azure Function时报错 The input is not a valid Base-64 string
			问题描述 创建一个PowerShell脚本的Azure Function,触发方式为 Storage Queue.但执行函数结果一直失败 (Failed). 错误消息为: Executed 'Func ... 
- Python 潮流周刊第 40 期(摘要)
			本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ... 
- 如何扩展Spark Catalyst,抓取spark sql 语句,通过listenerBus发送sql event以及编写自定义的Spark SQL引擎
			1.Spark Catalyst扩展点 Spark catalyst的扩展点在SPARK-18127中被引入,Spark用户可以在SQL处理的各个阶段扩展自定义实现,非常强大高效,是SparkSQL的 ... 
- 详解Python中sys模块的功能与应用
			本文分享自华为云社区<深入Python:sys模块的功能与应用详解>,作者: 柠檬味拥抱. 在Python的标准库中,sys 模块是一个常用而强大的工具,它提供了与Python解释器交互的 ... 
- 6. JVM本地方法
			1 本地方法 简单地讲,一个Native Method是一个Java调用非Java代码的接囗 一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C. 这个特征 ... 
