日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
前端|嘿,Nest.js實戰(zhàn)開發(fā)系列之使用TypeORM操作數(shù)據(jù)庫

寫在前面

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

創(chuàng)新互聯(lián)公司成都企業(yè)網(wǎng)站建設服務,提供成都做網(wǎng)站、成都網(wǎng)站設計網(wǎng)站開發(fā),網(wǎng)站定制,建網(wǎng)站,網(wǎng)站搭建,網(wǎng)站設計,自適應網(wǎng)站建設,網(wǎng)頁設計師打造企業(yè)風格網(wǎng)站,提供周到的售前咨詢和貼心的售后服務。歡迎咨詢做網(wǎng)站需要多少錢:028-86922220

環(huán)境準備:

  • Mysql 5.7
  • TypeORM 0.2.34

TypeORM集成

在Nest.js中可以使用任意數(shù)據(jù)庫,且內(nèi)部集成提供了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. @Module({
  4.   imports: [
  5.     TypeOrmModule.forRoot({
  6.       type: 'mysql',
  7.       host: 'localhost',
  8.       port: 3306,
  9.       username: 'root',
  10.       password: 'root',
  11.       database: 'test',
  12.       entities: [],
  13.       synchronize: true,
  14.     }),
  15.   ],
  16. })
  17. export class AppModule {}

切記:synchronize: true不應在生產(chǎn)中使用設置- 否則您可能會丟失生產(chǎn)數(shù)據(jù)。

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

當然,也可以在根目錄下創(chuàng)建ormconfig.json文件,在文件中進行數(shù)據(jù)庫信息的設置。

ormconfig.json

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

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

app.module.ts

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

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

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

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

app.module.ts

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

存儲庫模式

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

下面創(chuàng)建一個用戶實體,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. @Entity('user')
  6. export class UserEntity {
  7.   @PrimaryGeneratedColumn()
  8.   id: number;
  9.   @Column()
  10.   username: string;
  11.   @Column()
  12.   @IsEmail()
  13.   email: string;
  14.   @Column({default: ''})
  15.   bio: string;
  16.   @Column({default: ''})
  17.   image: string;
  18.   @Column()
  19.   password: string;
  20.   @BeforeInsert()
  21.   async hashPassword() {
  22.     this.password = await argon2.hash(this.password);
  23.   }
  24.   @ManyToMany(type => ArticleEntity)
  25.   @JoinTable()
  26.   favorites: ArticleEntity[];
  27.   @OneToMany(type => ArticleEntity, article => article.author)
  28.   articles: ArticleEntity[];
  29. }

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

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()來定義在當前范圍內(nèi)注冊了那些存儲庫,此時將可以使用裝飾器將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. @Controller('user')
  4. export class UsersController {
  5.   constructor(private readonly usersService: UsersService){}
  6.   // 查找指定用戶
  7.   @Get("find/:id")
  8.   async findById(@Query("id") id: number){
  9.     return this.usersService.findById(id);
  10.     
  11.   }
  12. }

數(shù)據(jù)表間的關系

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

數(shù)據(jù)表之間有三種關系:

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

測試代碼

users.controller.ts

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

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

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

后臺顯示結(jié)果如下:

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

小結(jié)

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

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


分享題目:前端|嘿,Nest.js實戰(zhàn)開發(fā)系列之使用TypeORM操作數(shù)據(jù)庫
URL標題:http://www.5511xx.com/article/coheepo.html