在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注意点的更多相关文章

  1. nestjs中typeorm进行事物操作

    https://typeorm.io/#/transactions 两种方法

  2. NodeMan架构

    在上一篇文章中我们介绍了NodeMan的基本概念,介绍了这是一套利用NodeJs框架来管理Ubuntu服务器的解决方案,接下来我们会继续介绍关于这样一套解决方案更多细节的内容. 后台: 使用node作 ...

  3. 开源低代码平台开发实践二:从 0 构建一个基于 ER 图的低代码后端

    前后端分离了! 第一次知道这个事情的时候,内心是困惑的. 前端都出去搞 SPA,SEO 们同意吗? 后来,SSR 来了. 他说:"SEO 们同意了!" 任何人的反对,都没用了,时代 ...

  4. Nest + typeorm

    1\     Nest (https://nestjs.com/)  is a framework for building efficient, scalable Node.js web appli ...

  5. Nestjs 身份验证

    文档 yarn add @nestjs/passport passport passport-http-bearer @nestjs/jwt passport-jwt auth.service.ts ...

  6. Nestjs 链接mysql

    文档 下插件 λ yarn add @nestjs/typeorm typeorm mysql 创建 cats模块, 控制器,service λ nest g mo cats λ nest g co ...

  7. GraphQL介绍&使用nestjs构建GraphQL查询服务

    GraphQL介绍&使用nestjs构建GraphQL查询服务(文章底部附demo地址) GraphQL一种用为你 API 而生的查询语言.出自于Facebook,GraphQL非常易懂,直接 ...

  8. NestJS 用TypeScript开发 nodeJS后端

    NestJS A progressive Node.js framework for building efficient and scalable server-side applications ...

  9. 在 Nest.js 中使用 MongoDB 与 TypeORM

    在 Nest.js 中使用 MongoDB 与 TypeORM 首先要在 database 文件夹里建立DatabaseModule模块文件, // database/database.module. ...

  10. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

随机推荐

  1. 欢迎加入 DotNet NB 交流学习群

    目录 起因 创建群组 群成员 技术交流 社区推广 社区前辈 欢迎加入 起因 自从2019年参加 .NET Conf China 大会之后,我创办了一个公众号 DotNet NB,内容主要是 关于 .N ...

  2. MySQL的CTE(公用表表达式)

    (一)概念 MySQL的CTE是在MySQL8.0版本开始支持的,公用表表达式是一个命名的临时结果集,仅在单个SQL语句(例如select.insert.delete和update)的执行范围内存在. ...

  3. 了解一下基本的http代理配置

    我们首先用一个简单例子了解一下基本的http代理配置 worker_processes 1; #nginx worker 数量 error_log logs/error.log; #指定错误日志文件路 ...

  4. CentOS 7.3 源码安装squid 4.12 及安装过程遇到的一些问题

    一.源码安装squid 4.12 1.下载squid-4.12源码包 wget http://www.squid-cache.org/Versions/v4/squid-4.12.tar.gz tar ...

  5. spring boot中配置网页语言国际化

    项目地址:https://gitee.com/indexman/spring_boot_in_action 开发步骤 1.编写国际化配置文件 场景是给登录页面 login.html添加国际化支持. 2 ...

  6. win32- GetMessage的使用

    BOOL bRet; while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0) { if (bRet == -1) { // handle th ...

  7. 【Android 逆向】apk反编译后重打包

    1. 执行 apktool b smali_dir smali_dir 为反编译出来的数据目录 执行后可能会报错 I: Building resources... W: /root/Desktop/t ...

  8. 如何配置WebStorm开发Chrome插件项目

    开发Chrome插件项目,在调用Chrome的相关接口时,默认情况下WebStorm是不会有任何提示的,这对于开发者特别是新手特别不友好. 因此,需要IDE能支持Chrome接口调用时的智能提示. 如 ...

  9. 项目实战:Qt编译Qt库以及使用C#调用Qt库,并实现C#集成Qt的tcp客户端

    需求   1.Qt已经开发了应用,封装成Qt库,以供C#调用.  2.Qt的tcp客户端封装,以供C#调用,双向传递数据.   原理   1.使用QtCreator编译msvc版本的Qt库:  2.使 ...

  10. 05-Redis系列之-主从复制配置和优化,fork和aof两大阻塞

    主从复制 原理 一台主服务器配多台从服务器,主服务器宕机后,从服务器挑选一台顶上去. 从服务器同步主服务器的数据,这个同步是单向的,并且从服务器不能设置值,否则会造成数据的混乱 功能 0.故障处理:s ...