【个人笔记】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 ...
随机推荐
- ResponseUtil jackson 转换问题;返回结果与 Bean 之间的转换,推荐使用convertValue
/** * 若成功往往有data数据 * 示例: * UserBase userBase = new UserBase(); * userBase.setUserName("李昱鑫" ...
- Excel如何核对同一行的两列数据是否一致
方法一 Ctrl+G 快捷键Ctrl+G,点击[定位条件],选择"行内容差异单元格",点击[确定]. 方法二 条件格式 逆向思维,先利用条件格式查找出相同的数据,筛选剔除相同的数据 ...
- JS leetcode 反转字符串 题解分析
壹 ❀ 引 今天做的一道题非常简单,原题来自leetcode第344题反转字符串,题目如下: 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外 ...
- NC20477 [ZJOI2008]树的统计COUNT
题目链接 题目 题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成 一些操作: I. CHANGE u t : 把结点u的权值改为t II ...
- 【Unity3D】异步Socket通讯
1 前言 同步 Socket 通讯 中的 Accept.Connect.Receive 等方法会阻塞当前线程,当前线程必须等待这些方法执行完,才会继续往下执行,用户需要另开线程执行这些耗时方法,否 ...
- Python三次样条插值与MATLAB三次样条插值简单案例
1 三次样条插值 早期工程师制图时,把富有弹性的细长木条(所谓样条)用压铁固定在样点上,在其他地方让它自由弯曲,然后沿木条画下曲线,成为样条曲线. 设函数S(x)∈C2[a,b] ,且在每个小区间[x ...
- Java设计模式-状态模式State
介绍 状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题.状态和行为是一一对应的,状态之间可以相互转换. 当一个对象的内在状态改变时,允许改变其行 ...
- 简单了解HTTP、Websocket和Netty
前言 伴随着网络的快速发展,网络通讯越来越重要,通讯的快捷.安全.方便影响着用户的体验.本文将探讨这些技术的原理.特点以及在实际应用中的应用场景. 1.HTTTP(超文本传输协议) HTTP是一种传输 ...
- 【Android 逆向】【攻防世界】RememberOther
1. apk安装到手机,提示输入用户名注册码 2. jadx 打开apk public boolean checkSN(String userName, String sn) { try { if ( ...
- 【Android 逆向】看雪题目:找出flag 如果输入正确则屏幕上的 hello会变成success
1. apk 安装到手机,只有一个输入框,随便输入点什么,提示error 2. apk拖入到jadx中 public class MainActivity extends AppCompatActiv ...