成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

前端 | 嘿,Nest.js實戰開發系列之使用TypeORM操作數據庫

開發 前端 MySQL
本篇文章介紹了mysql和typeorm之間的關系,typeorm的配置,nest是如何通過typeorm連接數據庫,以及簡單的用戶表數據查詢。

寫在前面

在上一篇文章《【前端】嘿,Nest.js實戰開發系列 01 ── Nest.js初體驗》中介紹了如何上手nest.js,同時詳細介紹了如何進行項目創建、路由訪問和創建模塊,這些都是項目實踐的基礎。隨著項目的推進,我們就要考慮如何實現數據庫的連接和使用,這樣可以用來實現前后端數據交互的數據存儲。

環境準備:

  • Mysql 5.7
  • TypeORM 0.2.34

TypeORM集成

在Nest.js中可以使用任意數據庫,且內部集成提供了TypeORM 和 Sequelize ,開箱即用@nestjs/typeorm和@nestjs/sequelize包。Nest 使用TypeORM,因為它是可用于 TypeScript 的最成熟的對象關系映射器 (ORM)。由于它是用 TypeScript 編寫的,因此它可以很好地與 Nest 框架集成。

要開始使用它,我們首先安裝所需的依賴項。在命令行中輸入:

  1. $ npm install --save @nestjs/typeorm typeorm mysql2 

安裝完畢后,可以將TypeOrmModule導入根目錄AppModule。

app.module.ts

  1. import { Module } from '@nestjs/common'
  2. import { TypeOrmModule } from '@nestjs/typeorm'
  3.  
  4. @Module({ 
  5.   imports: [ 
  6.     TypeOrmModule.forRoot({ 
  7.       type: 'mysql'
  8.       host: 'localhost'
  9.       port: 3306, 
  10.       username: 'root'
  11.       password'root'
  12.       database'test'
  13.       entities: [], 
  14.       synchronize: true
  15.     }), 
  16.   ], 
  17. }) 
  18. export class AppModule {} 

切記:synchronize: true不應在生產中使用設置- 否則您可能會丟失生產數據。

該forRoot()方法支持TypeORM包中的createConnection()函數公開的所有配置屬性。此外,還有幾個額外的配置屬性如下所述。

當然,也可以在根目錄下創建ormconfig.json文件,在文件中進行數據庫信息的設置。

ormconfig.json

  1.   "type""mysql"
  2.   "host""localhost"
  3.   "port": 3306, 
  4.   "username""root"
  5.   "password""root"
  6.   "database""test"
  7.   "entities": ["dist/**/*.entity{.ts,.js}"], 
  8.   "synchronize"true 

然后,我們可以在forRoot()沒有任何選項的情況下調用:

app.module.ts

  1. import { Module } from '@nestjs/common'
  2. import { TypeOrmModule } from '@nestjs/typeorm'
  3.  
  4. @Module({ 
  5.   imports: [TypeOrmModule.forRoot()], 
  6. }) 
  7. export class AppModule {} 

注意:靜態 glob 路徑(例如,dist/**/*.entity{ .ts,.js})將無法與webpack正常工作。

其實,ormconfig.json文件是由typeorm庫加載的,因此不會應用額外的屬性設置。TypeORM 提供了getConnectionOptions從ormconfig文件或環境變量中讀取連接選項的函數。

完成以上操作后,TypeORMConnection和EntityManager對象將可用于在整個項目中注入(無需導入任何模塊)。

app.module.ts

  1. import { TypeOrmModule } from '@nestjs/typeorm'
  2. import { Connection } from "typeorm"
  3. import { UsersModule } from './users/users.module'
  4.  
  5.  
  6. @Module({ 
  7.   imports: [ 
  8.     TypeOrmModule.forRoot(), 
  9.     UsersModule 
  10.   ], 
  11.   controllers: [AppController], 
  12.   providers: [AppService], 
  13. }) 
  14. export class AppModule { 
  15.   constructor(private connectionConnection){} 

存儲庫模式

TypeORM支持存儲庫設計模式,因此每個實體都有自己的存儲庫。這些存儲庫可以從數據庫連接中獲得。

下面創建一個用戶實體,users.entity.ts在users目錄下,

users.entity.ts

  1. import {Entity, PrimaryGeneratedColumn, Column, BeforeInsert, JoinTable, ManyToMany, OneToMany} from 'typeorm'
  2. import { IsEmail } from 'class-validator'
  3. import * as argon2 from 'argon2'
  4. import { ArticleEntity } from '../article/article.entity'
  5.  
  6. @Entity('user'
  7. export class UserEntity { 
  8.  
  9.   @PrimaryGeneratedColumn() 
  10.   id: number; 
  11.  
  12.   @Column() 
  13.   username: string; 
  14.  
  15.   @Column() 
  16.   @IsEmail() 
  17.   email: string; 
  18.  
  19.   @Column({default''}) 
  20.   bio: string; 
  21.  
  22.   @Column({default''}) 
  23.   image: string; 
  24.  
  25.   @Column() 
  26.   password: string; 
  27.  
  28.   @BeforeInsert() 
  29.   async hashPassword() { 
  30.     this.password = await argon2.hash(this.password); 
  31.   } 
  32.  
  33.   @ManyToMany(type => ArticleEntity) 
  34.   @JoinTable() 
  35.   favorites: ArticleEntity[]; 
  36.  
  37.   @OneToMany(type => ArticleEntity, article => article.author) 
  38.   articles: ArticleEntity[]; 

現在開始使用Users實體,只需要在users.module.ts文件中通過entities模塊forFeature()方法選項中的數組來進行導入。

users.module.ts

  1. import { Module } from '@nestjs/common'
  2. import { UsersController } from './users.controller'
  3. import { UsersService } from './users.service'
  4. import {UsersEntity} from "./users.entity"
  5. import { TypeOrmModule } from '@nestjs/typeorm'
  6. @Module({ 
  7.   imports: [TypeOrmModule.forFeature([UsersEntity])], 
  8.   providers: [UsersService], 
  9.   controllers: [ 
  10.     UsersController 
  11.   ], 
  12.   exports: [UsersService] 
  13. }) 
  14. export class UsersModule {} 

此模塊使用forFeature()來定義在當前范圍內注冊了那些存儲庫,此時將可以使用裝飾器將UsersRepository注入到`UsersService @InjectRepository().

users.service.ts

  1. import {Get, Post, Body, Put, Delete, Query, Param, Controller} from '@nestjs/common'
  2. import { UsersService } from './users.service'
  3.  
  4. @Controller('user'
  5. export class UsersController { 
  6.   constructor(private readonly usersService: UsersService){} 
  7.  
  8.   // 查找指定用戶 
  9.   @Get("find/:id"
  10.   async findById(@Query("id") id: number){ 
  11.     return this.usersService.findById(id); 
  12.      
  13.   } 

數據表間的關系

關系是在兩個或多個表之間建立的關聯,是基于每張表的公共字段,通常是主鍵和外鍵。

數據表之間有三種關系:

因此,在實體中定義關系可以使用相應的裝飾器。

測試代碼

users.controller.ts

  1. import {Get, Post, Body, Put, Delete, Query, Param, Controller} from '@nestjs/common'
  2. import { UsersService } from './users.service'
  3.  
  4. @Controller('user'
  5. export class UsersController { 
  6.   constructor(private readonly usersService: UsersService){} 
  7.  
  8.   // 查找指定用戶 
  9.   @Get("find/:id"
  10.   async findById(@Query("id") id: number){ 
  11.     return this.usersService.findById(id); 
  12.      
  13.   } 

當我們運行代碼時,數據庫自動生成了users表。

而當我們在postman向服務器請求指定id的用戶信息時,請求結果如下所示:

后臺顯示結果如下:

我們看到以上代碼測試是正確的。

小結

本篇文章介紹了mysql和typeorm之間的關系,typeorm的配置,nest是如何通過typeorm連接數據庫,以及簡單的用戶表數據查詢。

其實筆者之前也用過 Sequelize ,現在想要嘗試typeorm和nest的搭配,所以文章寫的有些亂,建議諸位多加查看官方文檔:《Nest官方文檔》和《Typeorm官方文檔》

 

責任編輯:姜華 來源: 前端萬有引力
相關推薦

2021-06-18 06:48:54

前端Nest.js技術熱點

2011-07-01 13:42:24

QT 數據庫

2023-06-15 15:21:43

2009-09-15 09:50:07

Linq操作數據庫

2020-11-16 08:56:02

Python

2011-07-05 10:27:06

MySQL數據庫檢索排序

2011-04-19 10:20:09

數據庫

2009-09-03 09:52:26

C# treeview

2009-07-07 09:24:37

LINQ檢索

2009-08-24 16:46:04

C# 泛型

2009-08-04 14:52:33

Visual Web ASP.NET

2023-12-27 13:44:00

數據庫系統分布式

2023-04-27 09:36:43

2023-12-14 15:07:31

多線程數據庫代碼

2022-10-09 15:41:54

Python數據庫

2022-03-18 21:51:10

Nest.jsAOP 架構后端

2022-02-02 20:21:24

短信驗證碼登錄

2016-05-11 10:09:49

數據層代碼FastQuery

2009-12-28 16:57:40

ADO .NET 類

2023-05-23 16:25:48

MyBatisSQL數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 青青草一区 | www.久久久.com | 国产一区二区三区四区在线观看 | 天天操天天操 | 国产精品免费一区二区三区四区 | 成人免费共享视频 | 91精品国产91久久久久久吃药 | 亚洲成人二区 | 国产欧美日韩精品一区二区三区 | 狠狠草视频 | 成人小视频在线观看 | 精品国产aⅴ | 五月天激情综合网 | av在线一区二区三区 | 一区二区三区免费 | 欧美一级片在线观看 | 精品日韩一区 | 亚洲免费视频一区二区 | 国产成人影院 | 国产精品视频久久久 | 91中文字幕 | 欧美一级久久 | 日韩在线中文 | 精品久久久久国产免费第一页 | 亚洲成人精品在线观看 | 久草在线在线精品观看 | 永久免费av| 色综合视频在线 | 夜夜骑首页 | 欧美 中文字幕 | 人人鲁人人莫人人爱精品 | 精品无码久久久久久国产 | av片在线观看 | 九九天堂网 | 成人欧美一区二区三区黑人孕妇 | 欧美自拍一区 | 国产黄色小视频在线观看 | 国产 亚洲 网红 主播 | 欧美在线观看一区 | 亚洲在线一区 | 成人在线观看免费视频 |