[{"data":1,"prerenderedAt":5398},["ShallowReactive",2],{"article-fr-\u002Fbackend\u002Fnest-js\u002Fconecting-nestjs-to-postgres-database":3,"article-sibling-fr-\u002Fbackend\u002Fnest-js\u002Fconecting-nestjs-to-postgres-database":2862,"surround-fr-\u002Fbackend\u002Fnest-js\u002Fconecting-nestjs-to-postgres-database":5373,"related-fr-\u002Fbackend\u002Fnest-js\u002Fconecting-nestjs-to-postgres-database":5380},{"id":4,"title":5,"body":6,"date":2845,"description":2846,"extension":2847,"img":2848,"meta":2849,"navigation":240,"path":2850,"seo":2851,"slug":2852,"stem":2853,"tags":2854,"topics":2858,"__hash__":2861},"content\u002F2.backend\u002F1.nest-js\u002F3.conecting-nestjs-to-postgres-database.fr.md","Maîtriser NestJS : connecter NestJS à une base PostgreSQL",{"type":7,"value":8,"toc":2835},"minimark",[9,14,27,30,44,48,56,59,94,104,497,502,506,516,774,778,785,788,974,993,1542,1546,1549,1552,1569,1576,1584,1589,1595,2108,2113,2118,2121,2124,2140,2151,2807,2815,2819,2822,2825,2828,2831],[10,11,13],"h2",{"id":12},"introduction","Introduction",[15,16,17,18,22,23,26],"p",{},"Dans le monde en constante évolution du développement web, une connexion à la base de données\nfiable et efficace est cruciale. Dans notre exploration continue de NestJS, on a vu ses\ncomposants essentiels comme les modules, contrôleurs et services. Il est temps d'aborder un\nélément vital pour développer des applications backend solides : utiliser ",[19,20,21],"strong",{},"TypeORM"," pour\nconnecter NestJS à une base ",[19,24,25],{},"PostgreSQL",".",[15,28,29],{},"Dans cet article, on parcourt ensemble les étapes pour connecter ton application NestJS à une\nbase PostgreSQL. On verra tout : configuration de la base, définition des entités, exécution\ndes requêtes, opérations sur la base. À la fin, tu auras les connaissances et compétences pour\nexploiter pleinement les capacités de NestJS avec PostgreSQL dans ton projet.",[31,32,33],"blockquote",{},[15,34,35,36,26],{},"J'ai créé un dépôt GitHub pour cette série, accessible à l'\n",[37,38,43],"a",{"href":39,"rel":40,"title":42},"https:\u002F\u002Fgithub.com\u002Fdenisakp\u002Fawesome-nest-js",[41],"nofollow","Projet awesome nest-js","adresse suivante",[10,45,47],{"id":46},"installer-les-packages-requis","Installer les packages requis",[15,49,50,51,55],{},"NestJS fournit le package ",[52,53,54],"code",{},"@nestjs\u002Ftypeorm"," pour se connecter aux bases SQL. TypeORM est l'ORM\nle plus avancé pour TypeScript. Il fonctionne bien avec le framework Nest parce qu'il est écrit\nen TypeScript. L'approche présentée dans ce chapitre s'applique à toute base supportée par\nTypeORM. Tu n'as qu'à installer les bibliothèques client API pour la base choisie.",[15,57,58],{},"Pour commencer, on doit installer les dépendances requises :",[60,61,67],"pre",{"className":62,"code":63,"filename":64,"language":65,"meta":66,"style":66},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","    npm install --save @nestjs\u002Ftypeorm typeorm pg\n","bash","shell","",[52,68,69],{"__ignoreMap":66},[70,71,74,78,82,85,88,91],"span",{"class":72,"line":73},"line",1,[70,75,77],{"class":76},"sBMFI","    npm",[70,79,81],{"class":80},"sfazB"," install",[70,83,84],{"class":80}," --save",[70,86,87],{"class":80}," @nestjs\u002Ftypeorm",[70,89,90],{"class":80}," typeorm",[70,92,93],{"class":80}," pg\n",[15,95,96,97,100,101,26],{},"Une fois l'installation terminée, on peut importer le ",[52,98,99],{},"TypeOrmModule"," dans le module racine\n",[52,102,103],{},"AppModule",[60,105,110],{"className":106,"code":107,"filename":108,"language":109,"meta":66,"style":66},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Module } from '@nestjs\u002Fcommon';\nimport { AppController } from '.\u002Fapp.controller';\nimport { AppService } from '.\u002Fapp.service';\nimport { ProductsModule } from '.\u002Fproducts\u002Fproducts.module';\nimport { TypeOrmModule } from '@nestjs\u002Ftypeorm';\n\n@Module({\n  imports: [\n    ProductsModule,\n    TypeOrmModule.forRoot({\n      type: 'postgres',\n      host: 'localhost',\n      port: 5432,\n      username: 'root',\n      password: '',\n      database: 'awesome-nestjs',\n      autoLoadEntities: true,\n      synchronize: true, \u002F\u002F avoid doing this in production please and use migrations instead\n    }),\n  ],\n  controllers: [AppController],\n  providers: [AppService],\n})\nexport class AppModule {\n}\n\n","app.module.ts","ts",[52,111,112,144,167,190,213,235,242,258,271,280,295,312,329,343,360,373,390,404,421,432,440,453,466,475,491],{"__ignoreMap":66},[70,113,114,118,122,126,129,132,135,138,141],{"class":72,"line":73},[70,115,117],{"class":116},"s7zQu","import",[70,119,121],{"class":120},"sMK4o"," {",[70,123,125],{"class":124},"sTEyZ"," Module",[70,127,128],{"class":120}," }",[70,130,131],{"class":116}," from",[70,133,134],{"class":120}," '",[70,136,137],{"class":80},"@nestjs\u002Fcommon",[70,139,140],{"class":120},"'",[70,142,143],{"class":120},";\n",[70,145,147,149,151,154,156,158,160,163,165],{"class":72,"line":146},2,[70,148,117],{"class":116},[70,150,121],{"class":120},[70,152,153],{"class":124}," AppController",[70,155,128],{"class":120},[70,157,131],{"class":116},[70,159,134],{"class":120},[70,161,162],{"class":80},".\u002Fapp.controller",[70,164,140],{"class":120},[70,166,143],{"class":120},[70,168,170,172,174,177,179,181,183,186,188],{"class":72,"line":169},3,[70,171,117],{"class":116},[70,173,121],{"class":120},[70,175,176],{"class":124}," AppService",[70,178,128],{"class":120},[70,180,131],{"class":116},[70,182,134],{"class":120},[70,184,185],{"class":80},".\u002Fapp.service",[70,187,140],{"class":120},[70,189,143],{"class":120},[70,191,193,195,197,200,202,204,206,209,211],{"class":72,"line":192},4,[70,194,117],{"class":116},[70,196,121],{"class":120},[70,198,199],{"class":124}," ProductsModule",[70,201,128],{"class":120},[70,203,131],{"class":116},[70,205,134],{"class":120},[70,207,208],{"class":80},".\u002Fproducts\u002Fproducts.module",[70,210,140],{"class":120},[70,212,143],{"class":120},[70,214,216,218,220,223,225,227,229,231,233],{"class":72,"line":215},5,[70,217,117],{"class":116},[70,219,121],{"class":120},[70,221,222],{"class":124}," TypeOrmModule",[70,224,128],{"class":120},[70,226,131],{"class":116},[70,228,134],{"class":120},[70,230,54],{"class":80},[70,232,140],{"class":120},[70,234,143],{"class":120},[70,236,238],{"class":72,"line":237},6,[70,239,241],{"emptyLinePlaceholder":240},true,"\n",[70,243,245,248,252,255],{"class":72,"line":244},7,[70,246,247],{"class":120},"@",[70,249,251],{"class":250},"s2Zo4","Module",[70,253,254],{"class":124},"(",[70,256,257],{"class":120},"{\n",[70,259,261,265,268],{"class":72,"line":260},8,[70,262,264],{"class":263},"swJcz","  imports",[70,266,267],{"class":120},":",[70,269,270],{"class":124}," [\n",[70,272,274,277],{"class":72,"line":273},9,[70,275,276],{"class":124},"    ProductsModule",[70,278,279],{"class":120},",\n",[70,281,283,286,288,291,293],{"class":72,"line":282},10,[70,284,285],{"class":124},"    TypeOrmModule",[70,287,26],{"class":120},[70,289,290],{"class":250},"forRoot",[70,292,254],{"class":124},[70,294,257],{"class":120},[70,296,298,301,303,305,308,310],{"class":72,"line":297},11,[70,299,300],{"class":263},"      type",[70,302,267],{"class":120},[70,304,134],{"class":120},[70,306,307],{"class":80},"postgres",[70,309,140],{"class":120},[70,311,279],{"class":120},[70,313,315,318,320,322,325,327],{"class":72,"line":314},12,[70,316,317],{"class":263},"      host",[70,319,267],{"class":120},[70,321,134],{"class":120},[70,323,324],{"class":80},"localhost",[70,326,140],{"class":120},[70,328,279],{"class":120},[70,330,332,335,337,341],{"class":72,"line":331},13,[70,333,334],{"class":263},"      port",[70,336,267],{"class":120},[70,338,340],{"class":339},"sbssI"," 5432",[70,342,279],{"class":120},[70,344,346,349,351,353,356,358],{"class":72,"line":345},14,[70,347,348],{"class":263},"      username",[70,350,267],{"class":120},[70,352,134],{"class":120},[70,354,355],{"class":80},"root",[70,357,140],{"class":120},[70,359,279],{"class":120},[70,361,363,366,368,371],{"class":72,"line":362},15,[70,364,365],{"class":263},"      password",[70,367,267],{"class":120},[70,369,370],{"class":120}," ''",[70,372,279],{"class":120},[70,374,376,379,381,383,386,388],{"class":72,"line":375},16,[70,377,378],{"class":263},"      database",[70,380,267],{"class":120},[70,382,134],{"class":120},[70,384,385],{"class":80},"awesome-nestjs",[70,387,140],{"class":120},[70,389,279],{"class":120},[70,391,393,396,398,402],{"class":72,"line":392},17,[70,394,395],{"class":263},"      autoLoadEntities",[70,397,267],{"class":120},[70,399,401],{"class":400},"sfNiH"," true",[70,403,279],{"class":120},[70,405,407,410,412,414,417],{"class":72,"line":406},18,[70,408,409],{"class":263},"      synchronize",[70,411,267],{"class":120},[70,413,401],{"class":400},[70,415,416],{"class":120},",",[70,418,420],{"class":419},"sHwdD"," \u002F\u002F avoid doing this in production please and use migrations instead\n",[70,422,424,427,430],{"class":72,"line":423},19,[70,425,426],{"class":120},"    }",[70,428,429],{"class":124},")",[70,431,279],{"class":120},[70,433,435,438],{"class":72,"line":434},20,[70,436,437],{"class":124},"  ]",[70,439,279],{"class":120},[70,441,443,446,448,451],{"class":72,"line":442},21,[70,444,445],{"class":263},"  controllers",[70,447,267],{"class":120},[70,449,450],{"class":124}," [AppController]",[70,452,279],{"class":120},[70,454,456,459,461,464],{"class":72,"line":455},22,[70,457,458],{"class":263},"  providers",[70,460,267],{"class":120},[70,462,463],{"class":124}," [AppService]",[70,465,279],{"class":120},[70,467,469,472],{"class":72,"line":468},23,[70,470,471],{"class":120},"}",[70,473,474],{"class":124},")\n",[70,476,478,481,485,488],{"class":72,"line":477},24,[70,479,480],{"class":116},"export",[70,482,484],{"class":483},"spNyl"," class",[70,486,487],{"class":76}," AppModule",[70,489,490],{"class":120}," {\n",[70,492,494],{"class":72,"line":493},25,[70,495,496],{"class":120},"}\n",[31,498,499],{},[15,500,501],{},"Voilà ce que propose la doc officielle. On y reviendra un peu plus tard pour quelques\naméliorations.",[10,503,505],{"id":504},"entités","Entités",[15,507,508,509,515],{},"Dans l'",[37,510,514],{"href":511,"rel":512,":target":513},"https:\u002F\u002Fwww.denisakp.me\u002Fblog\u002Fnest-js\u002Funderstanding-services-modules-and-controllers",[41],"_blank","article précédent","\non a parlé des entités. Cette fois, j'aimerais y revenir parce qu'il y a quelques petits\najustements à faire. Je te montre de quoi je parle :",[60,517,519],{"className":106,"code":518,"filename":108,"language":109,"meta":66,"style":66},"import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';\n\n\u002F\u002F @Entity annotation is used to define our Product class as an entity\n\u002F\u002F products simply represent the table name (it's optional).\n@Entity('products')\nexport class Product {\n  \u002F\u002F this anotation is used to define a property as the primary key.\n  \u002F\u002F it will also make sure the PK is auto increment! pretty cool hien ??? \n  @PrimaryGeneratedColumn()\n  id: number;\n\n  @Column() \u002F\u002F simply define a property as a table column\n  name: string;\n\n  @Column({ nullable: true }) \u002F\u002F simply means that the field will can be nullable in the table\n  description?: string;\n\n  @Column()\n  category: string;\n\n  @Column()\n  price: number;\n\n  @Column()\n  image: string;\n}\n",[52,520,521,553,557,562,567,585,596,601,606,617,629,633,646,658,662,688,700,704,712,723,727,735,746,750,758,769],{"__ignoreMap":66},[70,522,523,525,527,530,532,535,537,540,542,544,546,549,551],{"class":72,"line":73},[70,524,117],{"class":116},[70,526,121],{"class":120},[70,528,529],{"class":124}," Column",[70,531,416],{"class":120},[70,533,534],{"class":124}," Entity",[70,536,416],{"class":120},[70,538,539],{"class":124}," PrimaryGeneratedColumn",[70,541,128],{"class":120},[70,543,131],{"class":116},[70,545,134],{"class":120},[70,547,548],{"class":80},"typeorm",[70,550,140],{"class":120},[70,552,143],{"class":120},[70,554,555],{"class":72,"line":146},[70,556,241],{"emptyLinePlaceholder":240},[70,558,559],{"class":72,"line":169},[70,560,561],{"class":419},"\u002F\u002F @Entity annotation is used to define our Product class as an entity\n",[70,563,564],{"class":72,"line":192},[70,565,566],{"class":419},"\u002F\u002F products simply represent the table name (it's optional).\n",[70,568,569,571,574,576,578,581,583],{"class":72,"line":215},[70,570,247],{"class":120},[70,572,573],{"class":250},"Entity",[70,575,254],{"class":124},[70,577,140],{"class":120},[70,579,580],{"class":80},"products",[70,582,140],{"class":120},[70,584,474],{"class":124},[70,586,587,589,591,594],{"class":72,"line":237},[70,588,480],{"class":116},[70,590,484],{"class":483},[70,592,593],{"class":76}," Product",[70,595,490],{"class":120},[70,597,598],{"class":72,"line":244},[70,599,600],{"class":419},"  \u002F\u002F this anotation is used to define a property as the primary key.\n",[70,602,603],{"class":72,"line":260},[70,604,605],{"class":419},"  \u002F\u002F it will also make sure the PK is auto increment! pretty cool hien ??? \n",[70,607,608,611,614],{"class":72,"line":273},[70,609,610],{"class":120},"  @",[70,612,613],{"class":250},"PrimaryGeneratedColumn",[70,615,616],{"class":124},"()\n",[70,618,619,622,624,627],{"class":72,"line":282},[70,620,621],{"class":263},"  id",[70,623,267],{"class":120},[70,625,626],{"class":76}," number",[70,628,143],{"class":120},[70,630,631],{"class":72,"line":297},[70,632,241],{"emptyLinePlaceholder":240},[70,634,635,637,640,643],{"class":72,"line":314},[70,636,610],{"class":120},[70,638,639],{"class":250},"Column",[70,641,642],{"class":124},"() ",[70,644,645],{"class":419},"\u002F\u002F simply define a property as a table column\n",[70,647,648,651,653,656],{"class":72,"line":331},[70,649,650],{"class":263},"  name",[70,652,267],{"class":120},[70,654,655],{"class":76}," string",[70,657,143],{"class":120},[70,659,660],{"class":72,"line":345},[70,661,241],{"emptyLinePlaceholder":240},[70,663,664,666,668,670,673,676,678,680,682,685],{"class":72,"line":362},[70,665,610],{"class":120},[70,667,639],{"class":250},[70,669,254],{"class":124},[70,671,672],{"class":120},"{",[70,674,675],{"class":263}," nullable",[70,677,267],{"class":120},[70,679,401],{"class":400},[70,681,128],{"class":120},[70,683,684],{"class":124},") ",[70,686,687],{"class":419},"\u002F\u002F simply means that the field will can be nullable in the table\n",[70,689,690,693,696,698],{"class":72,"line":375},[70,691,692],{"class":263},"  description",[70,694,695],{"class":120},"?:",[70,697,655],{"class":76},[70,699,143],{"class":120},[70,701,702],{"class":72,"line":392},[70,703,241],{"emptyLinePlaceholder":240},[70,705,706,708,710],{"class":72,"line":406},[70,707,610],{"class":120},[70,709,639],{"class":250},[70,711,616],{"class":124},[70,713,714,717,719,721],{"class":72,"line":423},[70,715,716],{"class":263},"  category",[70,718,267],{"class":120},[70,720,655],{"class":76},[70,722,143],{"class":120},[70,724,725],{"class":72,"line":434},[70,726,241],{"emptyLinePlaceholder":240},[70,728,729,731,733],{"class":72,"line":442},[70,730,610],{"class":120},[70,732,639],{"class":250},[70,734,616],{"class":124},[70,736,737,740,742,744],{"class":72,"line":455},[70,738,739],{"class":263},"  price",[70,741,267],{"class":120},[70,743,626],{"class":76},[70,745,143],{"class":120},[70,747,748],{"class":72,"line":468},[70,749,241],{"emptyLinePlaceholder":240},[70,751,752,754,756],{"class":72,"line":477},[70,753,610],{"class":120},[70,755,639],{"class":250},[70,757,616],{"class":124},[70,759,760,763,765,767],{"class":72,"line":493},[70,761,762],{"class":263},"  image",[70,764,267],{"class":120},[70,766,655],{"class":76},[70,768,143],{"class":120},[70,770,772],{"class":72,"line":771},26,[70,773,496],{"class":120},[10,775,777],{"id":776},"pattern-repository","Pattern Repository",[15,779,780,781,784],{},"Le ",[19,782,783],{},"pattern Repository"," est un design pattern courant qui aide à isoler la logique métier de\nton application des opérations sous-jacentes sur la base de données. Dans NestJS, tu peux\nappliquer cette approche en douceur avec TypeORM, en obtenant une manière propre et organisée\nde te connecter à ta base.",[15,786,787],{},"Mettons à jour le fichier du module produit en y important l'entité Product :",[60,789,792],{"className":106,"code":790,"filename":791,"language":109,"meta":66,"style":66},"import { Module } from '@nestjs\u002Fcommon';\nimport { ProductsService } from '.\u002Fproducts.service';\nimport { ProductsController } from '.\u002Fproducts.controller';\nimport { TypeOrmModule } from '@nestjs\u002Ftypeorm';\nimport { Product } from '.\u002Fentities\u002Fproduct.entity';\n\n@Module({\n  imports: [TypeOrmModule.forFeature([Product])],\n  controllers: [ProductsController],\n  providers: [ProductsService],\n})\nexport class ProductsModule {\n}\n","products.module.ts",[52,793,794,814,836,858,878,899,903,913,932,943,954,960,970],{"__ignoreMap":66},[70,795,796,798,800,802,804,806,808,810,812],{"class":72,"line":73},[70,797,117],{"class":116},[70,799,121],{"class":120},[70,801,125],{"class":124},[70,803,128],{"class":120},[70,805,131],{"class":116},[70,807,134],{"class":120},[70,809,137],{"class":80},[70,811,140],{"class":120},[70,813,143],{"class":120},[70,815,816,818,820,823,825,827,829,832,834],{"class":72,"line":146},[70,817,117],{"class":116},[70,819,121],{"class":120},[70,821,822],{"class":124}," ProductsService",[70,824,128],{"class":120},[70,826,131],{"class":116},[70,828,134],{"class":120},[70,830,831],{"class":80},".\u002Fproducts.service",[70,833,140],{"class":120},[70,835,143],{"class":120},[70,837,838,840,842,845,847,849,851,854,856],{"class":72,"line":169},[70,839,117],{"class":116},[70,841,121],{"class":120},[70,843,844],{"class":124}," ProductsController",[70,846,128],{"class":120},[70,848,131],{"class":116},[70,850,134],{"class":120},[70,852,853],{"class":80},".\u002Fproducts.controller",[70,855,140],{"class":120},[70,857,143],{"class":120},[70,859,860,862,864,866,868,870,872,874,876],{"class":72,"line":192},[70,861,117],{"class":116},[70,863,121],{"class":120},[70,865,222],{"class":124},[70,867,128],{"class":120},[70,869,131],{"class":116},[70,871,134],{"class":120},[70,873,54],{"class":80},[70,875,140],{"class":120},[70,877,143],{"class":120},[70,879,880,882,884,886,888,890,892,895,897],{"class":72,"line":215},[70,881,117],{"class":116},[70,883,121],{"class":120},[70,885,593],{"class":124},[70,887,128],{"class":120},[70,889,131],{"class":116},[70,891,134],{"class":120},[70,893,894],{"class":80},".\u002Fentities\u002Fproduct.entity",[70,896,140],{"class":120},[70,898,143],{"class":120},[70,900,901],{"class":72,"line":237},[70,902,241],{"emptyLinePlaceholder":240},[70,904,905,907,909,911],{"class":72,"line":244},[70,906,247],{"class":120},[70,908,251],{"class":250},[70,910,254],{"class":124},[70,912,257],{"class":120},[70,914,915,917,919,922,924,927,930],{"class":72,"line":260},[70,916,264],{"class":263},[70,918,267],{"class":120},[70,920,921],{"class":124}," [TypeOrmModule",[70,923,26],{"class":120},[70,925,926],{"class":250},"forFeature",[70,928,929],{"class":124},"([Product])]",[70,931,279],{"class":120},[70,933,934,936,938,941],{"class":72,"line":273},[70,935,445],{"class":263},[70,937,267],{"class":120},[70,939,940],{"class":124}," [ProductsController]",[70,942,279],{"class":120},[70,944,945,947,949,952],{"class":72,"line":282},[70,946,458],{"class":263},[70,948,267],{"class":120},[70,950,951],{"class":124}," [ProductsService]",[70,953,279],{"class":120},[70,955,956,958],{"class":72,"line":297},[70,957,471],{"class":120},[70,959,474],{"class":124},[70,961,962,964,966,968],{"class":72,"line":314},[70,963,480],{"class":116},[70,965,484],{"class":483},[70,967,199],{"class":76},[70,969,490],{"class":120},[70,971,972],{"class":72,"line":331},[70,973,496],{"class":120},[15,975,976,977,980,981,984,985,988,989,992],{},"Ce module utilise la méthode ",[52,978,979],{},"forFeature()"," pour préciser quels repositories sont enregistrés\ndans le scope courant. Avec ça en place, on peut utiliser le décorateur ",[52,982,983],{},"@InjectRepository()","\npour injecter le ",[52,986,987],{},"UsersRepository"," dans le ",[52,990,991],{},"ProductsService"," :",[60,994,997],{"className":106,"code":995,"filename":996,"language":109,"meta":66,"style":66},"import { Injectable } from '@nestjs\u002Fcommon';\nimport { CreateProductDto } from '.\u002Fdto\u002Fcreate-product.dto';\nimport { UpdateProductDto } from '.\u002Fdto\u002Fupdate-product.dto';\nimport { Product } from '.\u002Fentities\u002Fproduct.entity';\nimport { InjectRepository } from '@nestjs\u002Ftypeorm';\nimport { Repository } from 'typeorm';\n\n@Injectable()\nexport class ProductsService {\n  constructor(\n    @InjectRepository(Product)\n    private productRepository: Repository\u003CProduct>,\n  ) {\n  }\n\n  async create(createProductDto: CreateProductDto) {\n    \u002F\u002F The save method is used to persist an entity, either by creating a new record in the database or updating an existing one\n    return await this.productRepository.save(createProductDto);\n  }\n\n  async findAll(): Promise\u003CProduct[]> {\n    \u002F\u002F with the find method, we can laod all the products (an array of products)\n    return this.productRepository.find();\n  }\n\n  async findOne(id: number): Promise\u003CProduct | null> {\n    \u002F\u002F the findoneBy method allow to retrieve the first row that matches with the provided id\n    \u002F\u002F it could be name, or product reference, but you have to make sure the field is unique\n    return await this.productRepository.findOneBy({ id });\n  }\n\n  async update(id: number, updateProductDto: UpdateProductDto) {\n    \u002F\u002F the update method modify an existing record\n    return await this.productRepository.update(id, updateProductDto);\n  }\n\n  async remove(id: number) {\n    \u002F\u002F to delete a row by it's id we use delete method\n    return await this.productRepository.delete(id);\n  }\n}\n","products.service.ts",[52,998,999,1020,1042,1064,1084,1105,1126,1130,1139,1149,1157,1168,1190,1197,1202,1206,1227,1232,1259,1263,1267,1292,1297,1315,1319,1323,1358,1364,1370,1399,1404,1409,1438,1444,1472,1477,1482,1502,1508,1532,1537],{"__ignoreMap":66},[70,1000,1001,1003,1005,1008,1010,1012,1014,1016,1018],{"class":72,"line":73},[70,1002,117],{"class":116},[70,1004,121],{"class":120},[70,1006,1007],{"class":124}," Injectable",[70,1009,128],{"class":120},[70,1011,131],{"class":116},[70,1013,134],{"class":120},[70,1015,137],{"class":80},[70,1017,140],{"class":120},[70,1019,143],{"class":120},[70,1021,1022,1024,1026,1029,1031,1033,1035,1038,1040],{"class":72,"line":146},[70,1023,117],{"class":116},[70,1025,121],{"class":120},[70,1027,1028],{"class":124}," CreateProductDto",[70,1030,128],{"class":120},[70,1032,131],{"class":116},[70,1034,134],{"class":120},[70,1036,1037],{"class":80},".\u002Fdto\u002Fcreate-product.dto",[70,1039,140],{"class":120},[70,1041,143],{"class":120},[70,1043,1044,1046,1048,1051,1053,1055,1057,1060,1062],{"class":72,"line":169},[70,1045,117],{"class":116},[70,1047,121],{"class":120},[70,1049,1050],{"class":124}," UpdateProductDto",[70,1052,128],{"class":120},[70,1054,131],{"class":116},[70,1056,134],{"class":120},[70,1058,1059],{"class":80},".\u002Fdto\u002Fupdate-product.dto",[70,1061,140],{"class":120},[70,1063,143],{"class":120},[70,1065,1066,1068,1070,1072,1074,1076,1078,1080,1082],{"class":72,"line":192},[70,1067,117],{"class":116},[70,1069,121],{"class":120},[70,1071,593],{"class":124},[70,1073,128],{"class":120},[70,1075,131],{"class":116},[70,1077,134],{"class":120},[70,1079,894],{"class":80},[70,1081,140],{"class":120},[70,1083,143],{"class":120},[70,1085,1086,1088,1090,1093,1095,1097,1099,1101,1103],{"class":72,"line":215},[70,1087,117],{"class":116},[70,1089,121],{"class":120},[70,1091,1092],{"class":124}," InjectRepository",[70,1094,128],{"class":120},[70,1096,131],{"class":116},[70,1098,134],{"class":120},[70,1100,54],{"class":80},[70,1102,140],{"class":120},[70,1104,143],{"class":120},[70,1106,1107,1109,1111,1114,1116,1118,1120,1122,1124],{"class":72,"line":237},[70,1108,117],{"class":116},[70,1110,121],{"class":120},[70,1112,1113],{"class":124}," Repository",[70,1115,128],{"class":120},[70,1117,131],{"class":116},[70,1119,134],{"class":120},[70,1121,548],{"class":80},[70,1123,140],{"class":120},[70,1125,143],{"class":120},[70,1127,1128],{"class":72,"line":244},[70,1129,241],{"emptyLinePlaceholder":240},[70,1131,1132,1134,1137],{"class":72,"line":260},[70,1133,247],{"class":120},[70,1135,1136],{"class":250},"Injectable",[70,1138,616],{"class":124},[70,1140,1141,1143,1145,1147],{"class":72,"line":273},[70,1142,480],{"class":116},[70,1144,484],{"class":483},[70,1146,822],{"class":76},[70,1148,490],{"class":120},[70,1150,1151,1154],{"class":72,"line":282},[70,1152,1153],{"class":483},"  constructor",[70,1155,1156],{"class":120},"(\n",[70,1158,1159,1162,1165],{"class":72,"line":297},[70,1160,1161],{"class":120},"    @",[70,1163,1164],{"class":250},"InjectRepository",[70,1166,1167],{"class":124},"(Product)\n",[70,1169,1170,1173,1177,1179,1181,1184,1187],{"class":72,"line":314},[70,1171,1172],{"class":483},"    private",[70,1174,1176],{"class":1175},"sHdIc"," productRepository",[70,1178,267],{"class":120},[70,1180,1113],{"class":76},[70,1182,1183],{"class":120},"\u003C",[70,1185,1186],{"class":76},"Product",[70,1188,1189],{"class":120},">,\n",[70,1191,1192,1195],{"class":72,"line":331},[70,1193,1194],{"class":120},"  )",[70,1196,490],{"class":120},[70,1198,1199],{"class":72,"line":345},[70,1200,1201],{"class":120},"  }\n",[70,1203,1204],{"class":72,"line":362},[70,1205,241],{"emptyLinePlaceholder":240},[70,1207,1208,1211,1214,1216,1219,1221,1223,1225],{"class":72,"line":375},[70,1209,1210],{"class":483},"  async",[70,1212,1213],{"class":263}," create",[70,1215,254],{"class":120},[70,1217,1218],{"class":1175},"createProductDto",[70,1220,267],{"class":120},[70,1222,1028],{"class":76},[70,1224,429],{"class":120},[70,1226,490],{"class":120},[70,1228,1229],{"class":72,"line":392},[70,1230,1231],{"class":419},"    \u002F\u002F The save method is used to persist an entity, either by creating a new record in the database or updating an existing one\n",[70,1233,1234,1237,1240,1243,1246,1248,1251,1253,1255,1257],{"class":72,"line":406},[70,1235,1236],{"class":116},"    return",[70,1238,1239],{"class":116}," await",[70,1241,1242],{"class":120}," this.",[70,1244,1245],{"class":124},"productRepository",[70,1247,26],{"class":120},[70,1249,1250],{"class":250},"save",[70,1252,254],{"class":263},[70,1254,1218],{"class":124},[70,1256,429],{"class":263},[70,1258,143],{"class":120},[70,1260,1261],{"class":72,"line":423},[70,1262,1201],{"class":120},[70,1264,1265],{"class":72,"line":434},[70,1266,241],{"emptyLinePlaceholder":240},[70,1268,1269,1271,1274,1277,1280,1282,1284,1287,1290],{"class":72,"line":442},[70,1270,1210],{"class":483},[70,1272,1273],{"class":263}," findAll",[70,1275,1276],{"class":120},"():",[70,1278,1279],{"class":76}," Promise",[70,1281,1183],{"class":120},[70,1283,1186],{"class":76},[70,1285,1286],{"class":124},"[]",[70,1288,1289],{"class":120},">",[70,1291,490],{"class":120},[70,1293,1294],{"class":72,"line":455},[70,1295,1296],{"class":419},"    \u002F\u002F with the find method, we can laod all the products (an array of products)\n",[70,1298,1299,1301,1303,1305,1307,1310,1313],{"class":72,"line":468},[70,1300,1236],{"class":116},[70,1302,1242],{"class":120},[70,1304,1245],{"class":124},[70,1306,26],{"class":120},[70,1308,1309],{"class":250},"find",[70,1311,1312],{"class":263},"()",[70,1314,143],{"class":120},[70,1316,1317],{"class":72,"line":477},[70,1318,1201],{"class":120},[70,1320,1321],{"class":72,"line":493},[70,1322,241],{"emptyLinePlaceholder":240},[70,1324,1325,1327,1330,1332,1335,1337,1339,1342,1344,1346,1348,1351,1354,1356],{"class":72,"line":771},[70,1326,1210],{"class":483},[70,1328,1329],{"class":263}," findOne",[70,1331,254],{"class":120},[70,1333,1334],{"class":1175},"id",[70,1336,267],{"class":120},[70,1338,626],{"class":76},[70,1340,1341],{"class":120},"):",[70,1343,1279],{"class":76},[70,1345,1183],{"class":120},[70,1347,1186],{"class":76},[70,1349,1350],{"class":120}," |",[70,1352,1353],{"class":76}," null",[70,1355,1289],{"class":120},[70,1357,490],{"class":120},[70,1359,1361],{"class":72,"line":1360},27,[70,1362,1363],{"class":419},"    \u002F\u002F the findoneBy method allow to retrieve the first row that matches with the provided id\n",[70,1365,1367],{"class":72,"line":1366},28,[70,1368,1369],{"class":419},"    \u002F\u002F it could be name, or product reference, but you have to make sure the field is unique\n",[70,1371,1373,1375,1377,1379,1381,1383,1386,1388,1390,1393,1395,1397],{"class":72,"line":1372},29,[70,1374,1236],{"class":116},[70,1376,1239],{"class":116},[70,1378,1242],{"class":120},[70,1380,1245],{"class":124},[70,1382,26],{"class":120},[70,1384,1385],{"class":250},"findOneBy",[70,1387,254],{"class":263},[70,1389,672],{"class":120},[70,1391,1392],{"class":124}," id",[70,1394,128],{"class":120},[70,1396,429],{"class":263},[70,1398,143],{"class":120},[70,1400,1402],{"class":72,"line":1401},30,[70,1403,1201],{"class":120},[70,1405,1407],{"class":72,"line":1406},31,[70,1408,241],{"emptyLinePlaceholder":240},[70,1410,1412,1414,1417,1419,1421,1423,1425,1427,1430,1432,1434,1436],{"class":72,"line":1411},32,[70,1413,1210],{"class":483},[70,1415,1416],{"class":263}," update",[70,1418,254],{"class":120},[70,1420,1334],{"class":1175},[70,1422,267],{"class":120},[70,1424,626],{"class":76},[70,1426,416],{"class":120},[70,1428,1429],{"class":1175}," updateProductDto",[70,1431,267],{"class":120},[70,1433,1050],{"class":76},[70,1435,429],{"class":120},[70,1437,490],{"class":120},[70,1439,1441],{"class":72,"line":1440},33,[70,1442,1443],{"class":419},"    \u002F\u002F the update method modify an existing record\n",[70,1445,1447,1449,1451,1453,1455,1457,1460,1462,1464,1466,1468,1470],{"class":72,"line":1446},34,[70,1448,1236],{"class":116},[70,1450,1239],{"class":116},[70,1452,1242],{"class":120},[70,1454,1245],{"class":124},[70,1456,26],{"class":120},[70,1458,1459],{"class":250},"update",[70,1461,254],{"class":263},[70,1463,1334],{"class":124},[70,1465,416],{"class":120},[70,1467,1429],{"class":124},[70,1469,429],{"class":263},[70,1471,143],{"class":120},[70,1473,1475],{"class":72,"line":1474},35,[70,1476,1201],{"class":120},[70,1478,1480],{"class":72,"line":1479},36,[70,1481,241],{"emptyLinePlaceholder":240},[70,1483,1485,1487,1490,1492,1494,1496,1498,1500],{"class":72,"line":1484},37,[70,1486,1210],{"class":483},[70,1488,1489],{"class":263}," remove",[70,1491,254],{"class":120},[70,1493,1334],{"class":1175},[70,1495,267],{"class":120},[70,1497,626],{"class":76},[70,1499,429],{"class":120},[70,1501,490],{"class":120},[70,1503,1505],{"class":72,"line":1504},38,[70,1506,1507],{"class":419},"    \u002F\u002F to delete a row by it's id we use delete method\n",[70,1509,1511,1513,1515,1517,1519,1521,1524,1526,1528,1530],{"class":72,"line":1510},39,[70,1512,1236],{"class":116},[70,1514,1239],{"class":116},[70,1516,1242],{"class":120},[70,1518,1245],{"class":124},[70,1520,26],{"class":120},[70,1522,1523],{"class":250},"delete",[70,1525,254],{"class":263},[70,1527,1334],{"class":124},[70,1529,429],{"class":263},[70,1531,143],{"class":120},[70,1533,1535],{"class":72,"line":1534},40,[70,1536,1201],{"class":120},[70,1538,1540],{"class":72,"line":1539},41,[70,1541,496],{"class":120},[10,1543,1545],{"id":1544},"variables-denvironnement","Variables d'environnement",[15,1547,1548],{},"Les applications tournent fréquemment dans différents contextes. Différentes options de\nconfiguration doivent être utilisées selon l'environnement. Par exemple, l'environnement local\nrepose typiquement sur des credentials de base de données spécifiques à l'instance locale.\nL'environnement de production a ses propres credentials. Comme ces variables changent, il est\nrecommandé de les conserver dans l'environnement.",[15,1550,1551],{},"Trêve de bavardages, installons les modules Node nécessaires :",[60,1553,1555],{"className":62,"code":1554,"filename":64,"language":65,"meta":66,"style":66},"    npm i --save @nestjs\u002Fconfig\n",[52,1556,1557],{"__ignoreMap":66},[70,1558,1559,1561,1564,1566],{"class":72,"line":73},[70,1560,77],{"class":76},[70,1562,1563],{"class":80}," i",[70,1565,84],{"class":80},[70,1567,1568],{"class":80}," @nestjs\u002Fconfig\n",[15,1570,1571,1572,1575],{},"Maintenant, on crée un fichier ",[52,1573,1574],{},".env"," qui sera chargé automatiquement au démarrage du projet :",[60,1577,1582],{"className":1578,"code":1580,"filename":1574,"language":1581,"meta":66},[1579],"language-text","POSTGRES_HOST=localhost\nPOSTGRES_PORT=5432\nPOSTGRES_USER=root\nPOSTGRES_PASSWORD=password\nPOSTGRES_DB=awesome-nestjs\n","text",[52,1583,1580],{"__ignoreMap":66},[31,1585,1586],{},[15,1587,1588],{},"N'oublie pas de mettre à jour avec tes vraies infos de base de données.",[15,1590,1591,1592,1594],{},"Ok, mettons à jour notre ",[52,1593,108],{}," pour profiter des fonctionnalités de la config Nest :",[60,1596,1598],{"className":106,"code":1597,"filename":108,"language":109,"meta":66,"style":66},"import { Module } from '@nestjs\u002Fcommon';\nimport { AppController } from '.\u002Fapp.controller';\nimport { AppService } from '.\u002Fapp.service';\nimport { ProductsModule } from '.\u002Fproducts\u002Fproducts.module';\nimport { TypeOrmModule } from '@nestjs\u002Ftypeorm';\nimport { ConfigModule, ConfigService } from '@nestjs\u002Fconfig';\n\n@Module({\n  imports: [\n    ConfigModule.forRoot({ cache: true }),\n    ProductsModule,\n    TypeOrmModule.forRootAsync({\n      imports: [ConfigModule],\n      inject: [ConfigService],\n      useFactory: (configService: ConfigService) => ({\n        type: 'postgres',\n        host: configService.get\u003Cstring>('POSTGRES_HOST'),\n        port: configService.get\u003Cnumber>('POSTGRES_PORT'),\n        username: configService.get\u003Cstring>('POSTGRES_USER'),\n        password: configService.get\u003Cstring>('POSTGRES_PASSWORD'),\n        database: configService.get\u003Cstring>('POSTGRES_DB'),\n        autoLoadEntities: true,\n        synchronize: true,\n      }),\n    }),\n  ],\n  controllers: [AppController],\n  providers: [AppService],\n})\nexport class AppModule {\n}\n",[52,1599,1600,1620,1640,1660,1680,1700,1727,1731,1741,1749,1775,1781,1794,1806,1818,1844,1859,1894,1927,1959,1991,2023,2034,2045,2054,2062,2068,2078,2088,2094,2104],{"__ignoreMap":66},[70,1601,1602,1604,1606,1608,1610,1612,1614,1616,1618],{"class":72,"line":73},[70,1603,117],{"class":116},[70,1605,121],{"class":120},[70,1607,125],{"class":124},[70,1609,128],{"class":120},[70,1611,131],{"class":116},[70,1613,134],{"class":120},[70,1615,137],{"class":80},[70,1617,140],{"class":120},[70,1619,143],{"class":120},[70,1621,1622,1624,1626,1628,1630,1632,1634,1636,1638],{"class":72,"line":146},[70,1623,117],{"class":116},[70,1625,121],{"class":120},[70,1627,153],{"class":124},[70,1629,128],{"class":120},[70,1631,131],{"class":116},[70,1633,134],{"class":120},[70,1635,162],{"class":80},[70,1637,140],{"class":120},[70,1639,143],{"class":120},[70,1641,1642,1644,1646,1648,1650,1652,1654,1656,1658],{"class":72,"line":169},[70,1643,117],{"class":116},[70,1645,121],{"class":120},[70,1647,176],{"class":124},[70,1649,128],{"class":120},[70,1651,131],{"class":116},[70,1653,134],{"class":120},[70,1655,185],{"class":80},[70,1657,140],{"class":120},[70,1659,143],{"class":120},[70,1661,1662,1664,1666,1668,1670,1672,1674,1676,1678],{"class":72,"line":192},[70,1663,117],{"class":116},[70,1665,121],{"class":120},[70,1667,199],{"class":124},[70,1669,128],{"class":120},[70,1671,131],{"class":116},[70,1673,134],{"class":120},[70,1675,208],{"class":80},[70,1677,140],{"class":120},[70,1679,143],{"class":120},[70,1681,1682,1684,1686,1688,1690,1692,1694,1696,1698],{"class":72,"line":215},[70,1683,117],{"class":116},[70,1685,121],{"class":120},[70,1687,222],{"class":124},[70,1689,128],{"class":120},[70,1691,131],{"class":116},[70,1693,134],{"class":120},[70,1695,54],{"class":80},[70,1697,140],{"class":120},[70,1699,143],{"class":120},[70,1701,1702,1704,1706,1709,1711,1714,1716,1718,1720,1723,1725],{"class":72,"line":237},[70,1703,117],{"class":116},[70,1705,121],{"class":120},[70,1707,1708],{"class":124}," ConfigModule",[70,1710,416],{"class":120},[70,1712,1713],{"class":124}," ConfigService",[70,1715,128],{"class":120},[70,1717,131],{"class":116},[70,1719,134],{"class":120},[70,1721,1722],{"class":80},"@nestjs\u002Fconfig",[70,1724,140],{"class":120},[70,1726,143],{"class":120},[70,1728,1729],{"class":72,"line":244},[70,1730,241],{"emptyLinePlaceholder":240},[70,1732,1733,1735,1737,1739],{"class":72,"line":260},[70,1734,247],{"class":120},[70,1736,251],{"class":250},[70,1738,254],{"class":124},[70,1740,257],{"class":120},[70,1742,1743,1745,1747],{"class":72,"line":273},[70,1744,264],{"class":263},[70,1746,267],{"class":120},[70,1748,270],{"class":124},[70,1750,1751,1754,1756,1758,1760,1762,1765,1767,1769,1771,1773],{"class":72,"line":282},[70,1752,1753],{"class":124},"    ConfigModule",[70,1755,26],{"class":120},[70,1757,290],{"class":250},[70,1759,254],{"class":124},[70,1761,672],{"class":120},[70,1763,1764],{"class":263}," cache",[70,1766,267],{"class":120},[70,1768,401],{"class":400},[70,1770,128],{"class":120},[70,1772,429],{"class":124},[70,1774,279],{"class":120},[70,1776,1777,1779],{"class":72,"line":297},[70,1778,276],{"class":124},[70,1780,279],{"class":120},[70,1782,1783,1785,1787,1790,1792],{"class":72,"line":314},[70,1784,285],{"class":124},[70,1786,26],{"class":120},[70,1788,1789],{"class":250},"forRootAsync",[70,1791,254],{"class":124},[70,1793,257],{"class":120},[70,1795,1796,1799,1801,1804],{"class":72,"line":331},[70,1797,1798],{"class":263},"      imports",[70,1800,267],{"class":120},[70,1802,1803],{"class":124}," [ConfigModule]",[70,1805,279],{"class":120},[70,1807,1808,1811,1813,1816],{"class":72,"line":345},[70,1809,1810],{"class":263},"      inject",[70,1812,267],{"class":120},[70,1814,1815],{"class":124}," [ConfigService]",[70,1817,279],{"class":120},[70,1819,1820,1823,1825,1828,1831,1833,1835,1837,1840,1842],{"class":72,"line":362},[70,1821,1822],{"class":250},"      useFactory",[70,1824,267],{"class":120},[70,1826,1827],{"class":120}," (",[70,1829,1830],{"class":1175},"configService",[70,1832,267],{"class":120},[70,1834,1713],{"class":76},[70,1836,429],{"class":120},[70,1838,1839],{"class":483}," =>",[70,1841,1827],{"class":124},[70,1843,257],{"class":120},[70,1845,1846,1849,1851,1853,1855,1857],{"class":72,"line":375},[70,1847,1848],{"class":263},"        type",[70,1850,267],{"class":120},[70,1852,134],{"class":120},[70,1854,307],{"class":80},[70,1856,140],{"class":120},[70,1858,279],{"class":120},[70,1860,1861,1864,1866,1869,1871,1874,1876,1879,1881,1883,1885,1888,1890,1892],{"class":72,"line":392},[70,1862,1863],{"class":263},"        host",[70,1865,267],{"class":120},[70,1867,1868],{"class":124}," configService",[70,1870,26],{"class":120},[70,1872,1873],{"class":250},"get",[70,1875,1183],{"class":120},[70,1877,1878],{"class":76},"string",[70,1880,1289],{"class":120},[70,1882,254],{"class":124},[70,1884,140],{"class":120},[70,1886,1887],{"class":80},"POSTGRES_HOST",[70,1889,140],{"class":120},[70,1891,429],{"class":124},[70,1893,279],{"class":120},[70,1895,1896,1899,1901,1903,1905,1907,1909,1912,1914,1916,1918,1921,1923,1925],{"class":72,"line":406},[70,1897,1898],{"class":263},"        port",[70,1900,267],{"class":120},[70,1902,1868],{"class":124},[70,1904,26],{"class":120},[70,1906,1873],{"class":250},[70,1908,1183],{"class":120},[70,1910,1911],{"class":76},"number",[70,1913,1289],{"class":120},[70,1915,254],{"class":124},[70,1917,140],{"class":120},[70,1919,1920],{"class":80},"POSTGRES_PORT",[70,1922,140],{"class":120},[70,1924,429],{"class":124},[70,1926,279],{"class":120},[70,1928,1929,1932,1934,1936,1938,1940,1942,1944,1946,1948,1950,1953,1955,1957],{"class":72,"line":423},[70,1930,1931],{"class":263},"        username",[70,1933,267],{"class":120},[70,1935,1868],{"class":124},[70,1937,26],{"class":120},[70,1939,1873],{"class":250},[70,1941,1183],{"class":120},[70,1943,1878],{"class":76},[70,1945,1289],{"class":120},[70,1947,254],{"class":124},[70,1949,140],{"class":120},[70,1951,1952],{"class":80},"POSTGRES_USER",[70,1954,140],{"class":120},[70,1956,429],{"class":124},[70,1958,279],{"class":120},[70,1960,1961,1964,1966,1968,1970,1972,1974,1976,1978,1980,1982,1985,1987,1989],{"class":72,"line":434},[70,1962,1963],{"class":263},"        password",[70,1965,267],{"class":120},[70,1967,1868],{"class":124},[70,1969,26],{"class":120},[70,1971,1873],{"class":250},[70,1973,1183],{"class":120},[70,1975,1878],{"class":76},[70,1977,1289],{"class":120},[70,1979,254],{"class":124},[70,1981,140],{"class":120},[70,1983,1984],{"class":80},"POSTGRES_PASSWORD",[70,1986,140],{"class":120},[70,1988,429],{"class":124},[70,1990,279],{"class":120},[70,1992,1993,1996,1998,2000,2002,2004,2006,2008,2010,2012,2014,2017,2019,2021],{"class":72,"line":442},[70,1994,1995],{"class":263},"        database",[70,1997,267],{"class":120},[70,1999,1868],{"class":124},[70,2001,26],{"class":120},[70,2003,1873],{"class":250},[70,2005,1183],{"class":120},[70,2007,1878],{"class":76},[70,2009,1289],{"class":120},[70,2011,254],{"class":124},[70,2013,140],{"class":120},[70,2015,2016],{"class":80},"POSTGRES_DB",[70,2018,140],{"class":120},[70,2020,429],{"class":124},[70,2022,279],{"class":120},[70,2024,2025,2028,2030,2032],{"class":72,"line":455},[70,2026,2027],{"class":263},"        autoLoadEntities",[70,2029,267],{"class":120},[70,2031,401],{"class":400},[70,2033,279],{"class":120},[70,2035,2036,2039,2041,2043],{"class":72,"line":468},[70,2037,2038],{"class":263},"        synchronize",[70,2040,267],{"class":120},[70,2042,401],{"class":400},[70,2044,279],{"class":120},[70,2046,2047,2050,2052],{"class":72,"line":477},[70,2048,2049],{"class":120},"      }",[70,2051,429],{"class":124},[70,2053,279],{"class":120},[70,2055,2056,2058,2060],{"class":72,"line":493},[70,2057,426],{"class":120},[70,2059,429],{"class":124},[70,2061,279],{"class":120},[70,2063,2064,2066],{"class":72,"line":771},[70,2065,437],{"class":124},[70,2067,279],{"class":120},[70,2069,2070,2072,2074,2076],{"class":72,"line":1360},[70,2071,445],{"class":263},[70,2073,267],{"class":120},[70,2075,450],{"class":124},[70,2077,279],{"class":120},[70,2079,2080,2082,2084,2086],{"class":72,"line":1366},[70,2081,458],{"class":263},[70,2083,267],{"class":120},[70,2085,463],{"class":124},[70,2087,279],{"class":120},[70,2089,2090,2092],{"class":72,"line":1372},[70,2091,471],{"class":120},[70,2093,474],{"class":124},[70,2095,2096,2098,2100,2102],{"class":72,"line":1401},[70,2097,480],{"class":116},[70,2099,484],{"class":483},[70,2101,487],{"class":76},[70,2103,490],{"class":120},[70,2105,2106],{"class":72,"line":1406},[70,2107,496],{"class":120},[15,2109,2110,2111,26],{},"Voilà, on s'est facilité la vie avec le package nest\u002Fconfiguration. Mais je ne sais pas si tu\nes aussi maniaque que moi de la validation des données. Bref, je te montre comment valider les\nvaleurs d'un fichier ",[52,2112,1574],{},[2114,2115,2117],"h3",{"id":2116},"validation-de-schéma","Validation de schéma",[15,2119,2120],{},"Si les variables d'environnement requises ne sont pas fournies ou ne respectent pas certaines\nrègles de validation, l'usage est de lever une exception au démarrage du programme.",[15,2122,2123],{},"Gérons ça rapidement :",[60,2125,2127],{"className":62,"code":2126,"filename":64,"language":65,"meta":66,"style":66},"    npm install --save joi\n",[52,2128,2129],{"__ignoreMap":66},[70,2130,2131,2133,2135,2137],{"class":72,"line":73},[70,2132,77],{"class":76},[70,2134,81],{"class":80},[70,2136,84],{"class":80},[70,2138,2139],{"class":80}," joi\n",[15,2141,2142,2143,2146,2147,2150],{},"On peut définir un schéma de validation Joi et le passer via la propriété ",[52,2144,2145],{},"validationSchema","\nde l'objet d'options de ",[52,2148,2149],{},"forRoot()",", comme ci-dessous :",[60,2152,2154],{"className":106,"code":2153,"filename":108,"language":109,"meta":66,"style":66},"import { Module } from '@nestjs\u002Fcommon';\nimport { AppController } from '.\u002Fapp.controller';\nimport { AppService } from '.\u002Fapp.service';\nimport { ProductsModule } from '.\u002Fproducts\u002Fproducts.module';\nimport { TypeOrmModule } from '@nestjs\u002Ftypeorm';\nimport { ConfigModule, ConfigService } from '@nestjs\u002Fconfig';\nimport * as Joi from 'joi';\n\n@Module({\n  imports: [\n    ProductsModule,\n    ConfigModule.forRoot({\n      cache: true,\n      validationSchema: Joi.object({\n        POSTGRES_HOST: Joi.string().required(),\n        POSTGRES_PORT: Joi.number().required(),\n        POSTGRES_USER: Joi.string().required(),\n        POSTGRES_PASSWORD: Joi.string().required(),\n        POSTGRES_DB: Joi.string().required(),\n      }),\n    }),\n    TypeOrmModule.forRootAsync({\n      imports: [ConfigModule],\n      inject: [ConfigService],\n      useFactory: (configService: ConfigService) => ({\n        type: 'postgres',\n        host: configService.get\u003Cstring>('POSTGRES_HOST'),\n        port: configService.get\u003Cnumber>('POSTGRES_PORT'),\n        username: configService.get\u003Cstring>('POSTGRES_USER'),\n        password: configService.get\u003Cstring>('POSTGRES_PASSWORD'),\n        database: configService.get\u003Cstring>('POSTGRES_DB'),\n        autoLoadEntities: true,\n        synchronize: true,\n      }),\n    }),\n  ],\n  controllers: [AppController],\n  providers: [AppService],\n})\nexport class AppModule {\n}\n\n",[52,2155,2156,2176,2196,2216,2236,2256,2280,2305,2309,2319,2327,2333,2345,2356,2375,2399,2422,2445,2468,2491,2499,2507,2519,2529,2539,2561,2575,2605,2635,2665,2695,2725,2735,2745,2753,2761,2767,2777,2787,2793,2803],{"__ignoreMap":66},[70,2157,2158,2160,2162,2164,2166,2168,2170,2172,2174],{"class":72,"line":73},[70,2159,117],{"class":116},[70,2161,121],{"class":120},[70,2163,125],{"class":124},[70,2165,128],{"class":120},[70,2167,131],{"class":116},[70,2169,134],{"class":120},[70,2171,137],{"class":80},[70,2173,140],{"class":120},[70,2175,143],{"class":120},[70,2177,2178,2180,2182,2184,2186,2188,2190,2192,2194],{"class":72,"line":146},[70,2179,117],{"class":116},[70,2181,121],{"class":120},[70,2183,153],{"class":124},[70,2185,128],{"class":120},[70,2187,131],{"class":116},[70,2189,134],{"class":120},[70,2191,162],{"class":80},[70,2193,140],{"class":120},[70,2195,143],{"class":120},[70,2197,2198,2200,2202,2204,2206,2208,2210,2212,2214],{"class":72,"line":169},[70,2199,117],{"class":116},[70,2201,121],{"class":120},[70,2203,176],{"class":124},[70,2205,128],{"class":120},[70,2207,131],{"class":116},[70,2209,134],{"class":120},[70,2211,185],{"class":80},[70,2213,140],{"class":120},[70,2215,143],{"class":120},[70,2217,2218,2220,2222,2224,2226,2228,2230,2232,2234],{"class":72,"line":192},[70,2219,117],{"class":116},[70,2221,121],{"class":120},[70,2223,199],{"class":124},[70,2225,128],{"class":120},[70,2227,131],{"class":116},[70,2229,134],{"class":120},[70,2231,208],{"class":80},[70,2233,140],{"class":120},[70,2235,143],{"class":120},[70,2237,2238,2240,2242,2244,2246,2248,2250,2252,2254],{"class":72,"line":215},[70,2239,117],{"class":116},[70,2241,121],{"class":120},[70,2243,222],{"class":124},[70,2245,128],{"class":120},[70,2247,131],{"class":116},[70,2249,134],{"class":120},[70,2251,54],{"class":80},[70,2253,140],{"class":120},[70,2255,143],{"class":120},[70,2257,2258,2260,2262,2264,2266,2268,2270,2272,2274,2276,2278],{"class":72,"line":237},[70,2259,117],{"class":116},[70,2261,121],{"class":120},[70,2263,1708],{"class":124},[70,2265,416],{"class":120},[70,2267,1713],{"class":124},[70,2269,128],{"class":120},[70,2271,131],{"class":116},[70,2273,134],{"class":120},[70,2275,1722],{"class":80},[70,2277,140],{"class":120},[70,2279,143],{"class":120},[70,2281,2282,2284,2287,2290,2293,2296,2298,2301,2303],{"class":72,"line":244},[70,2283,117],{"class":116},[70,2285,2286],{"class":120}," *",[70,2288,2289],{"class":116}," as",[70,2291,2292],{"class":124}," Joi ",[70,2294,2295],{"class":116},"from",[70,2297,134],{"class":120},[70,2299,2300],{"class":80},"joi",[70,2302,140],{"class":120},[70,2304,143],{"class":120},[70,2306,2307],{"class":72,"line":260},[70,2308,241],{"emptyLinePlaceholder":240},[70,2310,2311,2313,2315,2317],{"class":72,"line":273},[70,2312,247],{"class":120},[70,2314,251],{"class":250},[70,2316,254],{"class":124},[70,2318,257],{"class":120},[70,2320,2321,2323,2325],{"class":72,"line":282},[70,2322,264],{"class":263},[70,2324,267],{"class":120},[70,2326,270],{"class":124},[70,2328,2329,2331],{"class":72,"line":297},[70,2330,276],{"class":124},[70,2332,279],{"class":120},[70,2334,2335,2337,2339,2341,2343],{"class":72,"line":314},[70,2336,1753],{"class":124},[70,2338,26],{"class":120},[70,2340,290],{"class":250},[70,2342,254],{"class":124},[70,2344,257],{"class":120},[70,2346,2347,2350,2352,2354],{"class":72,"line":331},[70,2348,2349],{"class":263},"      cache",[70,2351,267],{"class":120},[70,2353,401],{"class":400},[70,2355,279],{"class":120},[70,2357,2358,2361,2363,2366,2368,2371,2373],{"class":72,"line":345},[70,2359,2360],{"class":263},"      validationSchema",[70,2362,267],{"class":120},[70,2364,2365],{"class":124}," Joi",[70,2367,26],{"class":120},[70,2369,2370],{"class":250},"object",[70,2372,254],{"class":124},[70,2374,257],{"class":120},[70,2376,2377,2380,2382,2384,2386,2388,2390,2392,2395,2397],{"class":72,"line":362},[70,2378,2379],{"class":263},"        POSTGRES_HOST",[70,2381,267],{"class":120},[70,2383,2365],{"class":124},[70,2385,26],{"class":120},[70,2387,1878],{"class":250},[70,2389,1312],{"class":124},[70,2391,26],{"class":120},[70,2393,2394],{"class":250},"required",[70,2396,1312],{"class":124},[70,2398,279],{"class":120},[70,2400,2401,2404,2406,2408,2410,2412,2414,2416,2418,2420],{"class":72,"line":375},[70,2402,2403],{"class":263},"        POSTGRES_PORT",[70,2405,267],{"class":120},[70,2407,2365],{"class":124},[70,2409,26],{"class":120},[70,2411,1911],{"class":250},[70,2413,1312],{"class":124},[70,2415,26],{"class":120},[70,2417,2394],{"class":250},[70,2419,1312],{"class":124},[70,2421,279],{"class":120},[70,2423,2424,2427,2429,2431,2433,2435,2437,2439,2441,2443],{"class":72,"line":392},[70,2425,2426],{"class":263},"        POSTGRES_USER",[70,2428,267],{"class":120},[70,2430,2365],{"class":124},[70,2432,26],{"class":120},[70,2434,1878],{"class":250},[70,2436,1312],{"class":124},[70,2438,26],{"class":120},[70,2440,2394],{"class":250},[70,2442,1312],{"class":124},[70,2444,279],{"class":120},[70,2446,2447,2450,2452,2454,2456,2458,2460,2462,2464,2466],{"class":72,"line":406},[70,2448,2449],{"class":263},"        POSTGRES_PASSWORD",[70,2451,267],{"class":120},[70,2453,2365],{"class":124},[70,2455,26],{"class":120},[70,2457,1878],{"class":250},[70,2459,1312],{"class":124},[70,2461,26],{"class":120},[70,2463,2394],{"class":250},[70,2465,1312],{"class":124},[70,2467,279],{"class":120},[70,2469,2470,2473,2475,2477,2479,2481,2483,2485,2487,2489],{"class":72,"line":423},[70,2471,2472],{"class":263},"        POSTGRES_DB",[70,2474,267],{"class":120},[70,2476,2365],{"class":124},[70,2478,26],{"class":120},[70,2480,1878],{"class":250},[70,2482,1312],{"class":124},[70,2484,26],{"class":120},[70,2486,2394],{"class":250},[70,2488,1312],{"class":124},[70,2490,279],{"class":120},[70,2492,2493,2495,2497],{"class":72,"line":434},[70,2494,2049],{"class":120},[70,2496,429],{"class":124},[70,2498,279],{"class":120},[70,2500,2501,2503,2505],{"class":72,"line":442},[70,2502,426],{"class":120},[70,2504,429],{"class":124},[70,2506,279],{"class":120},[70,2508,2509,2511,2513,2515,2517],{"class":72,"line":455},[70,2510,285],{"class":124},[70,2512,26],{"class":120},[70,2514,1789],{"class":250},[70,2516,254],{"class":124},[70,2518,257],{"class":120},[70,2520,2521,2523,2525,2527],{"class":72,"line":468},[70,2522,1798],{"class":263},[70,2524,267],{"class":120},[70,2526,1803],{"class":124},[70,2528,279],{"class":120},[70,2530,2531,2533,2535,2537],{"class":72,"line":477},[70,2532,1810],{"class":263},[70,2534,267],{"class":120},[70,2536,1815],{"class":124},[70,2538,279],{"class":120},[70,2540,2541,2543,2545,2547,2549,2551,2553,2555,2557,2559],{"class":72,"line":493},[70,2542,1822],{"class":250},[70,2544,267],{"class":120},[70,2546,1827],{"class":120},[70,2548,1830],{"class":1175},[70,2550,267],{"class":120},[70,2552,1713],{"class":76},[70,2554,429],{"class":120},[70,2556,1839],{"class":483},[70,2558,1827],{"class":124},[70,2560,257],{"class":120},[70,2562,2563,2565,2567,2569,2571,2573],{"class":72,"line":771},[70,2564,1848],{"class":263},[70,2566,267],{"class":120},[70,2568,134],{"class":120},[70,2570,307],{"class":80},[70,2572,140],{"class":120},[70,2574,279],{"class":120},[70,2576,2577,2579,2581,2583,2585,2587,2589,2591,2593,2595,2597,2599,2601,2603],{"class":72,"line":1360},[70,2578,1863],{"class":263},[70,2580,267],{"class":120},[70,2582,1868],{"class":124},[70,2584,26],{"class":120},[70,2586,1873],{"class":250},[70,2588,1183],{"class":120},[70,2590,1878],{"class":76},[70,2592,1289],{"class":120},[70,2594,254],{"class":124},[70,2596,140],{"class":120},[70,2598,1887],{"class":80},[70,2600,140],{"class":120},[70,2602,429],{"class":124},[70,2604,279],{"class":120},[70,2606,2607,2609,2611,2613,2615,2617,2619,2621,2623,2625,2627,2629,2631,2633],{"class":72,"line":1366},[70,2608,1898],{"class":263},[70,2610,267],{"class":120},[70,2612,1868],{"class":124},[70,2614,26],{"class":120},[70,2616,1873],{"class":250},[70,2618,1183],{"class":120},[70,2620,1911],{"class":76},[70,2622,1289],{"class":120},[70,2624,254],{"class":124},[70,2626,140],{"class":120},[70,2628,1920],{"class":80},[70,2630,140],{"class":120},[70,2632,429],{"class":124},[70,2634,279],{"class":120},[70,2636,2637,2639,2641,2643,2645,2647,2649,2651,2653,2655,2657,2659,2661,2663],{"class":72,"line":1372},[70,2638,1931],{"class":263},[70,2640,267],{"class":120},[70,2642,1868],{"class":124},[70,2644,26],{"class":120},[70,2646,1873],{"class":250},[70,2648,1183],{"class":120},[70,2650,1878],{"class":76},[70,2652,1289],{"class":120},[70,2654,254],{"class":124},[70,2656,140],{"class":120},[70,2658,1952],{"class":80},[70,2660,140],{"class":120},[70,2662,429],{"class":124},[70,2664,279],{"class":120},[70,2666,2667,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687,2689,2691,2693],{"class":72,"line":1401},[70,2668,1963],{"class":263},[70,2670,267],{"class":120},[70,2672,1868],{"class":124},[70,2674,26],{"class":120},[70,2676,1873],{"class":250},[70,2678,1183],{"class":120},[70,2680,1878],{"class":76},[70,2682,1289],{"class":120},[70,2684,254],{"class":124},[70,2686,140],{"class":120},[70,2688,1984],{"class":80},[70,2690,140],{"class":120},[70,2692,429],{"class":124},[70,2694,279],{"class":120},[70,2696,2697,2699,2701,2703,2705,2707,2709,2711,2713,2715,2717,2719,2721,2723],{"class":72,"line":1406},[70,2698,1995],{"class":263},[70,2700,267],{"class":120},[70,2702,1868],{"class":124},[70,2704,26],{"class":120},[70,2706,1873],{"class":250},[70,2708,1183],{"class":120},[70,2710,1878],{"class":76},[70,2712,1289],{"class":120},[70,2714,254],{"class":124},[70,2716,140],{"class":120},[70,2718,2016],{"class":80},[70,2720,140],{"class":120},[70,2722,429],{"class":124},[70,2724,279],{"class":120},[70,2726,2727,2729,2731,2733],{"class":72,"line":1411},[70,2728,2027],{"class":263},[70,2730,267],{"class":120},[70,2732,401],{"class":400},[70,2734,279],{"class":120},[70,2736,2737,2739,2741,2743],{"class":72,"line":1440},[70,2738,2038],{"class":263},[70,2740,267],{"class":120},[70,2742,401],{"class":400},[70,2744,279],{"class":120},[70,2746,2747,2749,2751],{"class":72,"line":1446},[70,2748,2049],{"class":120},[70,2750,429],{"class":124},[70,2752,279],{"class":120},[70,2754,2755,2757,2759],{"class":72,"line":1474},[70,2756,426],{"class":120},[70,2758,429],{"class":124},[70,2760,279],{"class":120},[70,2762,2763,2765],{"class":72,"line":1479},[70,2764,437],{"class":124},[70,2766,279],{"class":120},[70,2768,2769,2771,2773,2775],{"class":72,"line":1484},[70,2770,445],{"class":263},[70,2772,267],{"class":120},[70,2774,450],{"class":124},[70,2776,279],{"class":120},[70,2778,2779,2781,2783,2785],{"class":72,"line":1504},[70,2780,458],{"class":263},[70,2782,267],{"class":120},[70,2784,463],{"class":124},[70,2786,279],{"class":120},[70,2788,2789,2791],{"class":72,"line":1510},[70,2790,471],{"class":120},[70,2792,474],{"class":124},[70,2794,2795,2797,2799,2801],{"class":72,"line":1534},[70,2796,480],{"class":116},[70,2798,484],{"class":483},[70,2800,487],{"class":76},[70,2802,490],{"class":120},[70,2804,2805],{"class":72,"line":1539},[70,2806,496],{"class":120},[31,2808,2809],{},[15,2810,2811,2812,2814],{},"Crois-moi : prends l'habitude de valider le fichier ",[52,2813,1574],{}," pour éviter les soucis en\nproduction.",[10,2816,2818],{"id":2817},"résumé","Résumé",[15,2820,2821],{},"Dans cet article, on a relié NestJS à PostgreSQL, une base de données relationnelle open\nsource. On a appris à créer une connexion fluide entre notre application NestJS et la base via\nTypeORM, posant les bases d'applications data-driven efficaces et maintenables.",[15,2823,2824],{},"On a couvert des tâches essentielles : créer la connexion à la base, définir les entités, et\nexécuter des requêtes pour les opérations CRUD. On en a aussi appris davantage sur la façon\ndont NestJS et TypeORM coopèrent pour simplifier les interactions avec la base, rendant la\nconception d'APIs scalables et performantes plus simple que jamais.",[15,2826,2827],{},"Dans le prochain article, on verra ensemble comment implémenter les relations OneToOne,\nOneToMany et ManyToMany avec TypeORM et PostgreSQL.",[15,2829,2830],{},"À suivre !",[2832,2833,2834],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":66,"searchDepth":146,"depth":146,"links":2836},[2837,2838,2839,2840,2841,2844],{"id":12,"depth":146,"text":13},{"id":46,"depth":146,"text":47},{"id":504,"depth":146,"text":505},{"id":776,"depth":146,"text":777},{"id":1544,"depth":146,"text":1545,"children":2842},[2843],{"id":2116,"depth":169,"text":2117},{"id":2817,"depth":146,"text":2818},"2023-09-06","Apprends les étapes essentielles pour maîtriser NestJS et tirer parti de TypeORM pour une connectivité base de données robuste dans tes projets.","md","https:\u002F\u002Fres.cloudinary.com\u002Fdpdwhd6ka\u002Fimage\u002Fupload\u002Fv1692780505\u002FBlog\u002Farticles\u002Fnest-js\u002Fazgcjzm8pwgdckdybir9.svg",{},"\u002Fbackend\u002Fnest-js\u002Fconecting-nestjs-to-postgres-database.fr",{"title":5,"description":2846},"connecting-nestjs-to-postgres-database","2.backend\u002F1.nest-js\u002F3.conecting-nestjs-to-postgres-database.fr",[2855,2856,2857],"Nest-JS","Mirco-service","API",[2859,2860],"backend","nest-js","SxFp5E8mOXuvtwUXz1g5L4lAIZofltdEERiEos3vNaU",{"id":2863,"title":2864,"body":2865,"date":2845,"description":5365,"extension":2847,"img":2848,"meta":5366,"navigation":240,"path":5367,"seo":5368,"slug":2852,"stem":5369,"tags":5370,"topics":5371,"__hash__":5372},"content\u002F2.backend\u002F1.nest-js\u002F3.conecting-nestjs-to-postgres-database.md","Mastering NestJS: Connecting NestJs to PostgreSQL Database ",{"type":7,"value":2866,"toc":5355},[2867,2869,2872,2875,2885,2889,2892,2895,2898,2916,2922,3218,3223,3227,3235,3461,3465,3468,3471,3645,3654,4132,4136,4139,4142,4156,4162,4167,4172,4179,4659,4662,4666,4669,4672,4686,4692,5332,5337,5341,5344,5347,5350,5353],[10,2868,13],{"id":12},[15,2870,2871],{},"In the ever-changing world of web development, having a dependable and efficient database connection is critical. In our\ncontinued exploration of NestJS, we've looked at its essential building components such as modules, controllers, and\nservices. Now it's time to get into a vital part of developing powerful backend applications: using TypeORM to connect\nNestJS to a PostgresSQL database.",[15,2873,2874],{},"In this post, we'll walk you through the steps of connecting your NestJS application to a PostgresSQL database. We'll go\nthrough everything from database configuration to defining database entities, query execution, and database operations.\nBy the end of this lesson, you'll have the knowledge and skills to fully utilize the capabilities of NestJS with\nPostgresSQL in your project.",[31,2876,2877],{},[15,2878,2879,2880],{},"I created a GitHub repo for this series accessible at the following\n",[37,2881,2884],{"href":39,"rel":2882,"title":2883},[41],"Awesome nest-js project","address",[10,2886,2888],{"id":2887},"installing-required-packages","Installing required packages",[15,2890,2891],{},"NestJS provides the `@nestjs\u002Ftypeorm package for connecting with SQL databases.\nTypeORM is the most advanced Object Relational Mapper (ORM) for TypeScript.\nIt works well with the Nest framework because it is written in TypeScript.\nThe approach outlined in this chapter is applicable to any TypeORM-supported database. You only need to install the\nclient API libraries for your chosen database.",[15,2893,2894],{},"To get started, we must first install the required dependencies.",[15,2896,2897],{},"Let's create our first CRUD resource the following cli command:",[60,2899,2900],{"className":62,"code":63,"filename":64,"language":65,"meta":66,"style":66},[52,2901,2902],{"__ignoreMap":66},[70,2903,2904,2906,2908,2910,2912,2914],{"class":72,"line":73},[70,2905,77],{"class":76},[70,2907,81],{"class":80},[70,2909,84],{"class":80},[70,2911,87],{"class":80},[70,2913,90],{"class":80},[70,2915,93],{"class":80},[15,2917,2918,2919,2921],{},"Once the installation process is complete, we can import the ",[52,2920,99],{}," into the root AppModule.",[60,2923,2924],{"className":106,"code":107,"filename":108,"language":109,"meta":66,"style":66},[52,2925,2926,2946,2966,2986,3006,3026,3030,3040,3048,3054,3066,3080,3094,3104,3118,3128,3142,3152,3164,3172,3178,3188,3198,3204,3214],{"__ignoreMap":66},[70,2927,2928,2930,2932,2934,2936,2938,2940,2942,2944],{"class":72,"line":73},[70,2929,117],{"class":116},[70,2931,121],{"class":120},[70,2933,125],{"class":124},[70,2935,128],{"class":120},[70,2937,131],{"class":116},[70,2939,134],{"class":120},[70,2941,137],{"class":80},[70,2943,140],{"class":120},[70,2945,143],{"class":120},[70,2947,2948,2950,2952,2954,2956,2958,2960,2962,2964],{"class":72,"line":146},[70,2949,117],{"class":116},[70,2951,121],{"class":120},[70,2953,153],{"class":124},[70,2955,128],{"class":120},[70,2957,131],{"class":116},[70,2959,134],{"class":120},[70,2961,162],{"class":80},[70,2963,140],{"class":120},[70,2965,143],{"class":120},[70,2967,2968,2970,2972,2974,2976,2978,2980,2982,2984],{"class":72,"line":169},[70,2969,117],{"class":116},[70,2971,121],{"class":120},[70,2973,176],{"class":124},[70,2975,128],{"class":120},[70,2977,131],{"class":116},[70,2979,134],{"class":120},[70,2981,185],{"class":80},[70,2983,140],{"class":120},[70,2985,143],{"class":120},[70,2987,2988,2990,2992,2994,2996,2998,3000,3002,3004],{"class":72,"line":192},[70,2989,117],{"class":116},[70,2991,121],{"class":120},[70,2993,199],{"class":124},[70,2995,128],{"class":120},[70,2997,131],{"class":116},[70,2999,134],{"class":120},[70,3001,208],{"class":80},[70,3003,140],{"class":120},[70,3005,143],{"class":120},[70,3007,3008,3010,3012,3014,3016,3018,3020,3022,3024],{"class":72,"line":215},[70,3009,117],{"class":116},[70,3011,121],{"class":120},[70,3013,222],{"class":124},[70,3015,128],{"class":120},[70,3017,131],{"class":116},[70,3019,134],{"class":120},[70,3021,54],{"class":80},[70,3023,140],{"class":120},[70,3025,143],{"class":120},[70,3027,3028],{"class":72,"line":237},[70,3029,241],{"emptyLinePlaceholder":240},[70,3031,3032,3034,3036,3038],{"class":72,"line":244},[70,3033,247],{"class":120},[70,3035,251],{"class":250},[70,3037,254],{"class":124},[70,3039,257],{"class":120},[70,3041,3042,3044,3046],{"class":72,"line":260},[70,3043,264],{"class":263},[70,3045,267],{"class":120},[70,3047,270],{"class":124},[70,3049,3050,3052],{"class":72,"line":273},[70,3051,276],{"class":124},[70,3053,279],{"class":120},[70,3055,3056,3058,3060,3062,3064],{"class":72,"line":282},[70,3057,285],{"class":124},[70,3059,26],{"class":120},[70,3061,290],{"class":250},[70,3063,254],{"class":124},[70,3065,257],{"class":120},[70,3067,3068,3070,3072,3074,3076,3078],{"class":72,"line":297},[70,3069,300],{"class":263},[70,3071,267],{"class":120},[70,3073,134],{"class":120},[70,3075,307],{"class":80},[70,3077,140],{"class":120},[70,3079,279],{"class":120},[70,3081,3082,3084,3086,3088,3090,3092],{"class":72,"line":314},[70,3083,317],{"class":263},[70,3085,267],{"class":120},[70,3087,134],{"class":120},[70,3089,324],{"class":80},[70,3091,140],{"class":120},[70,3093,279],{"class":120},[70,3095,3096,3098,3100,3102],{"class":72,"line":331},[70,3097,334],{"class":263},[70,3099,267],{"class":120},[70,3101,340],{"class":339},[70,3103,279],{"class":120},[70,3105,3106,3108,3110,3112,3114,3116],{"class":72,"line":345},[70,3107,348],{"class":263},[70,3109,267],{"class":120},[70,3111,134],{"class":120},[70,3113,355],{"class":80},[70,3115,140],{"class":120},[70,3117,279],{"class":120},[70,3119,3120,3122,3124,3126],{"class":72,"line":362},[70,3121,365],{"class":263},[70,3123,267],{"class":120},[70,3125,370],{"class":120},[70,3127,279],{"class":120},[70,3129,3130,3132,3134,3136,3138,3140],{"class":72,"line":375},[70,3131,378],{"class":263},[70,3133,267],{"class":120},[70,3135,134],{"class":120},[70,3137,385],{"class":80},[70,3139,140],{"class":120},[70,3141,279],{"class":120},[70,3143,3144,3146,3148,3150],{"class":72,"line":392},[70,3145,395],{"class":263},[70,3147,267],{"class":120},[70,3149,401],{"class":400},[70,3151,279],{"class":120},[70,3153,3154,3156,3158,3160,3162],{"class":72,"line":406},[70,3155,409],{"class":263},[70,3157,267],{"class":120},[70,3159,401],{"class":400},[70,3161,416],{"class":120},[70,3163,420],{"class":419},[70,3165,3166,3168,3170],{"class":72,"line":423},[70,3167,426],{"class":120},[70,3169,429],{"class":124},[70,3171,279],{"class":120},[70,3173,3174,3176],{"class":72,"line":434},[70,3175,437],{"class":124},[70,3177,279],{"class":120},[70,3179,3180,3182,3184,3186],{"class":72,"line":442},[70,3181,445],{"class":263},[70,3183,267],{"class":120},[70,3185,450],{"class":124},[70,3187,279],{"class":120},[70,3189,3190,3192,3194,3196],{"class":72,"line":455},[70,3191,458],{"class":263},[70,3193,267],{"class":120},[70,3195,463],{"class":124},[70,3197,279],{"class":120},[70,3199,3200,3202],{"class":72,"line":468},[70,3201,471],{"class":120},[70,3203,474],{"class":124},[70,3205,3206,3208,3210,3212],{"class":72,"line":477},[70,3207,480],{"class":116},[70,3209,484],{"class":483},[70,3211,487],{"class":76},[70,3213,490],{"class":120},[70,3215,3216],{"class":72,"line":493},[70,3217,496],{"class":120},[31,3219,3220],{},[15,3221,3222],{},"Here is what the official documentation offers us. But we'll come back to this a little later and make some\nimprovements.",[10,3224,3226],{"id":3225},"entities","Entities",[15,3228,3229,3230,3234],{},"In the ",[37,3231,3233],{"href":511,"rel":3232,":target":513},[41],"previous","\npost we talked about entities.\nBut this time I would\nlike to come back to it because there are some smalls arrangements to be made.\nLet me show what I'm talking about",[60,3236,3237],{"className":106,"code":518,"filename":108,"language":109,"meta":66,"style":66},[52,3238,3239,3267,3271,3275,3279,3295,3305,3309,3313,3321,3331,3335,3345,3355,3359,3381,3391,3395,3403,3413,3417,3425,3435,3439,3447,3457],{"__ignoreMap":66},[70,3240,3241,3243,3245,3247,3249,3251,3253,3255,3257,3259,3261,3263,3265],{"class":72,"line":73},[70,3242,117],{"class":116},[70,3244,121],{"class":120},[70,3246,529],{"class":124},[70,3248,416],{"class":120},[70,3250,534],{"class":124},[70,3252,416],{"class":120},[70,3254,539],{"class":124},[70,3256,128],{"class":120},[70,3258,131],{"class":116},[70,3260,134],{"class":120},[70,3262,548],{"class":80},[70,3264,140],{"class":120},[70,3266,143],{"class":120},[70,3268,3269],{"class":72,"line":146},[70,3270,241],{"emptyLinePlaceholder":240},[70,3272,3273],{"class":72,"line":169},[70,3274,561],{"class":419},[70,3276,3277],{"class":72,"line":192},[70,3278,566],{"class":419},[70,3280,3281,3283,3285,3287,3289,3291,3293],{"class":72,"line":215},[70,3282,247],{"class":120},[70,3284,573],{"class":250},[70,3286,254],{"class":124},[70,3288,140],{"class":120},[70,3290,580],{"class":80},[70,3292,140],{"class":120},[70,3294,474],{"class":124},[70,3296,3297,3299,3301,3303],{"class":72,"line":237},[70,3298,480],{"class":116},[70,3300,484],{"class":483},[70,3302,593],{"class":76},[70,3304,490],{"class":120},[70,3306,3307],{"class":72,"line":244},[70,3308,600],{"class":419},[70,3310,3311],{"class":72,"line":260},[70,3312,605],{"class":419},[70,3314,3315,3317,3319],{"class":72,"line":273},[70,3316,610],{"class":120},[70,3318,613],{"class":250},[70,3320,616],{"class":124},[70,3322,3323,3325,3327,3329],{"class":72,"line":282},[70,3324,621],{"class":263},[70,3326,267],{"class":120},[70,3328,626],{"class":76},[70,3330,143],{"class":120},[70,3332,3333],{"class":72,"line":297},[70,3334,241],{"emptyLinePlaceholder":240},[70,3336,3337,3339,3341,3343],{"class":72,"line":314},[70,3338,610],{"class":120},[70,3340,639],{"class":250},[70,3342,642],{"class":124},[70,3344,645],{"class":419},[70,3346,3347,3349,3351,3353],{"class":72,"line":331},[70,3348,650],{"class":263},[70,3350,267],{"class":120},[70,3352,655],{"class":76},[70,3354,143],{"class":120},[70,3356,3357],{"class":72,"line":345},[70,3358,241],{"emptyLinePlaceholder":240},[70,3360,3361,3363,3365,3367,3369,3371,3373,3375,3377,3379],{"class":72,"line":362},[70,3362,610],{"class":120},[70,3364,639],{"class":250},[70,3366,254],{"class":124},[70,3368,672],{"class":120},[70,3370,675],{"class":263},[70,3372,267],{"class":120},[70,3374,401],{"class":400},[70,3376,128],{"class":120},[70,3378,684],{"class":124},[70,3380,687],{"class":419},[70,3382,3383,3385,3387,3389],{"class":72,"line":375},[70,3384,692],{"class":263},[70,3386,695],{"class":120},[70,3388,655],{"class":76},[70,3390,143],{"class":120},[70,3392,3393],{"class":72,"line":392},[70,3394,241],{"emptyLinePlaceholder":240},[70,3396,3397,3399,3401],{"class":72,"line":406},[70,3398,610],{"class":120},[70,3400,639],{"class":250},[70,3402,616],{"class":124},[70,3404,3405,3407,3409,3411],{"class":72,"line":423},[70,3406,716],{"class":263},[70,3408,267],{"class":120},[70,3410,655],{"class":76},[70,3412,143],{"class":120},[70,3414,3415],{"class":72,"line":434},[70,3416,241],{"emptyLinePlaceholder":240},[70,3418,3419,3421,3423],{"class":72,"line":442},[70,3420,610],{"class":120},[70,3422,639],{"class":250},[70,3424,616],{"class":124},[70,3426,3427,3429,3431,3433],{"class":72,"line":455},[70,3428,739],{"class":263},[70,3430,267],{"class":120},[70,3432,626],{"class":76},[70,3434,143],{"class":120},[70,3436,3437],{"class":72,"line":468},[70,3438,241],{"emptyLinePlaceholder":240},[70,3440,3441,3443,3445],{"class":72,"line":477},[70,3442,610],{"class":120},[70,3444,639],{"class":250},[70,3446,616],{"class":124},[70,3448,3449,3451,3453,3455],{"class":72,"line":493},[70,3450,762],{"class":263},[70,3452,267],{"class":120},[70,3454,655],{"class":76},[70,3456,143],{"class":120},[70,3458,3459],{"class":72,"line":771},[70,3460,496],{"class":120},[10,3462,3464],{"id":3463},"repository-pattern","Repository Pattern",[15,3466,3467],{},"The Repository Pattern is a commonly used design pattern that helps isolate your application's business logic from the\nunderlying database activities. In NestJS, you can apply this approach smoothly using TypeORM, providing a clean and\norganized way to connect with your database.",[15,3469,3470],{},"Let's update the product module file by importing the Product entity in the module",[60,3472,3473],{"className":106,"code":790,"filename":791,"language":109,"meta":66,"style":66},[52,3474,3475,3495,3515,3535,3555,3575,3579,3589,3605,3615,3625,3631,3641],{"__ignoreMap":66},[70,3476,3477,3479,3481,3483,3485,3487,3489,3491,3493],{"class":72,"line":73},[70,3478,117],{"class":116},[70,3480,121],{"class":120},[70,3482,125],{"class":124},[70,3484,128],{"class":120},[70,3486,131],{"class":116},[70,3488,134],{"class":120},[70,3490,137],{"class":80},[70,3492,140],{"class":120},[70,3494,143],{"class":120},[70,3496,3497,3499,3501,3503,3505,3507,3509,3511,3513],{"class":72,"line":146},[70,3498,117],{"class":116},[70,3500,121],{"class":120},[70,3502,822],{"class":124},[70,3504,128],{"class":120},[70,3506,131],{"class":116},[70,3508,134],{"class":120},[70,3510,831],{"class":80},[70,3512,140],{"class":120},[70,3514,143],{"class":120},[70,3516,3517,3519,3521,3523,3525,3527,3529,3531,3533],{"class":72,"line":169},[70,3518,117],{"class":116},[70,3520,121],{"class":120},[70,3522,844],{"class":124},[70,3524,128],{"class":120},[70,3526,131],{"class":116},[70,3528,134],{"class":120},[70,3530,853],{"class":80},[70,3532,140],{"class":120},[70,3534,143],{"class":120},[70,3536,3537,3539,3541,3543,3545,3547,3549,3551,3553],{"class":72,"line":192},[70,3538,117],{"class":116},[70,3540,121],{"class":120},[70,3542,222],{"class":124},[70,3544,128],{"class":120},[70,3546,131],{"class":116},[70,3548,134],{"class":120},[70,3550,54],{"class":80},[70,3552,140],{"class":120},[70,3554,143],{"class":120},[70,3556,3557,3559,3561,3563,3565,3567,3569,3571,3573],{"class":72,"line":215},[70,3558,117],{"class":116},[70,3560,121],{"class":120},[70,3562,593],{"class":124},[70,3564,128],{"class":120},[70,3566,131],{"class":116},[70,3568,134],{"class":120},[70,3570,894],{"class":80},[70,3572,140],{"class":120},[70,3574,143],{"class":120},[70,3576,3577],{"class":72,"line":237},[70,3578,241],{"emptyLinePlaceholder":240},[70,3580,3581,3583,3585,3587],{"class":72,"line":244},[70,3582,247],{"class":120},[70,3584,251],{"class":250},[70,3586,254],{"class":124},[70,3588,257],{"class":120},[70,3590,3591,3593,3595,3597,3599,3601,3603],{"class":72,"line":260},[70,3592,264],{"class":263},[70,3594,267],{"class":120},[70,3596,921],{"class":124},[70,3598,26],{"class":120},[70,3600,926],{"class":250},[70,3602,929],{"class":124},[70,3604,279],{"class":120},[70,3606,3607,3609,3611,3613],{"class":72,"line":273},[70,3608,445],{"class":263},[70,3610,267],{"class":120},[70,3612,940],{"class":124},[70,3614,279],{"class":120},[70,3616,3617,3619,3621,3623],{"class":72,"line":282},[70,3618,458],{"class":263},[70,3620,267],{"class":120},[70,3622,951],{"class":124},[70,3624,279],{"class":120},[70,3626,3627,3629],{"class":72,"line":297},[70,3628,471],{"class":120},[70,3630,474],{"class":124},[70,3632,3633,3635,3637,3639],{"class":72,"line":314},[70,3634,480],{"class":116},[70,3636,484],{"class":483},[70,3638,199],{"class":76},[70,3640,490],{"class":120},[70,3642,3643],{"class":72,"line":331},[70,3644,496],{"class":120},[15,3646,3647,3648,3650,3651,3653],{},"This module uses the ",[52,3649,979],{}," method to specify which repositories are registered in the current scope.\nWith that in place, we can use the ",[52,3652,983],{}," decorator to inject the UsersRepository into the\nProductsService:",[60,3655,3656],{"className":106,"code":995,"filename":996,"language":109,"meta":66,"style":66},[52,3657,3658,3678,3698,3718,3738,3758,3778,3782,3790,3800,3806,3814,3830,3836,3840,3844,3862,3866,3888,3892,3896,3916,3920,3936,3940,3944,3974,3978,3982,4008,4012,4016,4042,4046,4072,4076,4080,4098,4102,4124,4128],{"__ignoreMap":66},[70,3659,3660,3662,3664,3666,3668,3670,3672,3674,3676],{"class":72,"line":73},[70,3661,117],{"class":116},[70,3663,121],{"class":120},[70,3665,1007],{"class":124},[70,3667,128],{"class":120},[70,3669,131],{"class":116},[70,3671,134],{"class":120},[70,3673,137],{"class":80},[70,3675,140],{"class":120},[70,3677,143],{"class":120},[70,3679,3680,3682,3684,3686,3688,3690,3692,3694,3696],{"class":72,"line":146},[70,3681,117],{"class":116},[70,3683,121],{"class":120},[70,3685,1028],{"class":124},[70,3687,128],{"class":120},[70,3689,131],{"class":116},[70,3691,134],{"class":120},[70,3693,1037],{"class":80},[70,3695,140],{"class":120},[70,3697,143],{"class":120},[70,3699,3700,3702,3704,3706,3708,3710,3712,3714,3716],{"class":72,"line":169},[70,3701,117],{"class":116},[70,3703,121],{"class":120},[70,3705,1050],{"class":124},[70,3707,128],{"class":120},[70,3709,131],{"class":116},[70,3711,134],{"class":120},[70,3713,1059],{"class":80},[70,3715,140],{"class":120},[70,3717,143],{"class":120},[70,3719,3720,3722,3724,3726,3728,3730,3732,3734,3736],{"class":72,"line":192},[70,3721,117],{"class":116},[70,3723,121],{"class":120},[70,3725,593],{"class":124},[70,3727,128],{"class":120},[70,3729,131],{"class":116},[70,3731,134],{"class":120},[70,3733,894],{"class":80},[70,3735,140],{"class":120},[70,3737,143],{"class":120},[70,3739,3740,3742,3744,3746,3748,3750,3752,3754,3756],{"class":72,"line":215},[70,3741,117],{"class":116},[70,3743,121],{"class":120},[70,3745,1092],{"class":124},[70,3747,128],{"class":120},[70,3749,131],{"class":116},[70,3751,134],{"class":120},[70,3753,54],{"class":80},[70,3755,140],{"class":120},[70,3757,143],{"class":120},[70,3759,3760,3762,3764,3766,3768,3770,3772,3774,3776],{"class":72,"line":237},[70,3761,117],{"class":116},[70,3763,121],{"class":120},[70,3765,1113],{"class":124},[70,3767,128],{"class":120},[70,3769,131],{"class":116},[70,3771,134],{"class":120},[70,3773,548],{"class":80},[70,3775,140],{"class":120},[70,3777,143],{"class":120},[70,3779,3780],{"class":72,"line":244},[70,3781,241],{"emptyLinePlaceholder":240},[70,3783,3784,3786,3788],{"class":72,"line":260},[70,3785,247],{"class":120},[70,3787,1136],{"class":250},[70,3789,616],{"class":124},[70,3791,3792,3794,3796,3798],{"class":72,"line":273},[70,3793,480],{"class":116},[70,3795,484],{"class":483},[70,3797,822],{"class":76},[70,3799,490],{"class":120},[70,3801,3802,3804],{"class":72,"line":282},[70,3803,1153],{"class":483},[70,3805,1156],{"class":120},[70,3807,3808,3810,3812],{"class":72,"line":297},[70,3809,1161],{"class":120},[70,3811,1164],{"class":250},[70,3813,1167],{"class":124},[70,3815,3816,3818,3820,3822,3824,3826,3828],{"class":72,"line":314},[70,3817,1172],{"class":483},[70,3819,1176],{"class":1175},[70,3821,267],{"class":120},[70,3823,1113],{"class":76},[70,3825,1183],{"class":120},[70,3827,1186],{"class":76},[70,3829,1189],{"class":120},[70,3831,3832,3834],{"class":72,"line":331},[70,3833,1194],{"class":120},[70,3835,490],{"class":120},[70,3837,3838],{"class":72,"line":345},[70,3839,1201],{"class":120},[70,3841,3842],{"class":72,"line":362},[70,3843,241],{"emptyLinePlaceholder":240},[70,3845,3846,3848,3850,3852,3854,3856,3858,3860],{"class":72,"line":375},[70,3847,1210],{"class":483},[70,3849,1213],{"class":263},[70,3851,254],{"class":120},[70,3853,1218],{"class":1175},[70,3855,267],{"class":120},[70,3857,1028],{"class":76},[70,3859,429],{"class":120},[70,3861,490],{"class":120},[70,3863,3864],{"class":72,"line":392},[70,3865,1231],{"class":419},[70,3867,3868,3870,3872,3874,3876,3878,3880,3882,3884,3886],{"class":72,"line":406},[70,3869,1236],{"class":116},[70,3871,1239],{"class":116},[70,3873,1242],{"class":120},[70,3875,1245],{"class":124},[70,3877,26],{"class":120},[70,3879,1250],{"class":250},[70,3881,254],{"class":263},[70,3883,1218],{"class":124},[70,3885,429],{"class":263},[70,3887,143],{"class":120},[70,3889,3890],{"class":72,"line":423},[70,3891,1201],{"class":120},[70,3893,3894],{"class":72,"line":434},[70,3895,241],{"emptyLinePlaceholder":240},[70,3897,3898,3900,3902,3904,3906,3908,3910,3912,3914],{"class":72,"line":442},[70,3899,1210],{"class":483},[70,3901,1273],{"class":263},[70,3903,1276],{"class":120},[70,3905,1279],{"class":76},[70,3907,1183],{"class":120},[70,3909,1186],{"class":76},[70,3911,1286],{"class":124},[70,3913,1289],{"class":120},[70,3915,490],{"class":120},[70,3917,3918],{"class":72,"line":455},[70,3919,1296],{"class":419},[70,3921,3922,3924,3926,3928,3930,3932,3934],{"class":72,"line":468},[70,3923,1236],{"class":116},[70,3925,1242],{"class":120},[70,3927,1245],{"class":124},[70,3929,26],{"class":120},[70,3931,1309],{"class":250},[70,3933,1312],{"class":263},[70,3935,143],{"class":120},[70,3937,3938],{"class":72,"line":477},[70,3939,1201],{"class":120},[70,3941,3942],{"class":72,"line":493},[70,3943,241],{"emptyLinePlaceholder":240},[70,3945,3946,3948,3950,3952,3954,3956,3958,3960,3962,3964,3966,3968,3970,3972],{"class":72,"line":771},[70,3947,1210],{"class":483},[70,3949,1329],{"class":263},[70,3951,254],{"class":120},[70,3953,1334],{"class":1175},[70,3955,267],{"class":120},[70,3957,626],{"class":76},[70,3959,1341],{"class":120},[70,3961,1279],{"class":76},[70,3963,1183],{"class":120},[70,3965,1186],{"class":76},[70,3967,1350],{"class":120},[70,3969,1353],{"class":76},[70,3971,1289],{"class":120},[70,3973,490],{"class":120},[70,3975,3976],{"class":72,"line":1360},[70,3977,1363],{"class":419},[70,3979,3980],{"class":72,"line":1366},[70,3981,1369],{"class":419},[70,3983,3984,3986,3988,3990,3992,3994,3996,3998,4000,4002,4004,4006],{"class":72,"line":1372},[70,3985,1236],{"class":116},[70,3987,1239],{"class":116},[70,3989,1242],{"class":120},[70,3991,1245],{"class":124},[70,3993,26],{"class":120},[70,3995,1385],{"class":250},[70,3997,254],{"class":263},[70,3999,672],{"class":120},[70,4001,1392],{"class":124},[70,4003,128],{"class":120},[70,4005,429],{"class":263},[70,4007,143],{"class":120},[70,4009,4010],{"class":72,"line":1401},[70,4011,1201],{"class":120},[70,4013,4014],{"class":72,"line":1406},[70,4015,241],{"emptyLinePlaceholder":240},[70,4017,4018,4020,4022,4024,4026,4028,4030,4032,4034,4036,4038,4040],{"class":72,"line":1411},[70,4019,1210],{"class":483},[70,4021,1416],{"class":263},[70,4023,254],{"class":120},[70,4025,1334],{"class":1175},[70,4027,267],{"class":120},[70,4029,626],{"class":76},[70,4031,416],{"class":120},[70,4033,1429],{"class":1175},[70,4035,267],{"class":120},[70,4037,1050],{"class":76},[70,4039,429],{"class":120},[70,4041,490],{"class":120},[70,4043,4044],{"class":72,"line":1440},[70,4045,1443],{"class":419},[70,4047,4048,4050,4052,4054,4056,4058,4060,4062,4064,4066,4068,4070],{"class":72,"line":1446},[70,4049,1236],{"class":116},[70,4051,1239],{"class":116},[70,4053,1242],{"class":120},[70,4055,1245],{"class":124},[70,4057,26],{"class":120},[70,4059,1459],{"class":250},[70,4061,254],{"class":263},[70,4063,1334],{"class":124},[70,4065,416],{"class":120},[70,4067,1429],{"class":124},[70,4069,429],{"class":263},[70,4071,143],{"class":120},[70,4073,4074],{"class":72,"line":1474},[70,4075,1201],{"class":120},[70,4077,4078],{"class":72,"line":1479},[70,4079,241],{"emptyLinePlaceholder":240},[70,4081,4082,4084,4086,4088,4090,4092,4094,4096],{"class":72,"line":1484},[70,4083,1210],{"class":483},[70,4085,1489],{"class":263},[70,4087,254],{"class":120},[70,4089,1334],{"class":1175},[70,4091,267],{"class":120},[70,4093,626],{"class":76},[70,4095,429],{"class":120},[70,4097,490],{"class":120},[70,4099,4100],{"class":72,"line":1504},[70,4101,1507],{"class":419},[70,4103,4104,4106,4108,4110,4112,4114,4116,4118,4120,4122],{"class":72,"line":1510},[70,4105,1236],{"class":116},[70,4107,1239],{"class":116},[70,4109,1242],{"class":120},[70,4111,1245],{"class":124},[70,4113,26],{"class":120},[70,4115,1523],{"class":250},[70,4117,254],{"class":263},[70,4119,1334],{"class":124},[70,4121,429],{"class":263},[70,4123,143],{"class":120},[70,4125,4126],{"class":72,"line":1534},[70,4127,1201],{"class":120},[70,4129,4130],{"class":72,"line":1539},[70,4131,496],{"class":120},[10,4133,4135],{"id":4134},"environment-variables","Environment variables",[15,4137,4138],{},"Applications are frequently run in a variety of contexts. Different setup options should be used depending on the\nenvironment. For example, the local environment typically relies on unique database credentials that are only valid for\nthe local DB instance. The production environment would have its own set of database credentials. Because configuration\nvariables change, it is recommended to save them in the environment.",[15,4140,4141],{},"Enough chatters, and let's get to the point to install the required node modules.",[60,4143,4144],{"className":62,"code":1554,"filename":64,"language":65,"meta":66,"style":66},[52,4145,4146],{"__ignoreMap":66},[70,4147,4148,4150,4152,4154],{"class":72,"line":73},[70,4149,77],{"class":76},[70,4151,1563],{"class":80},[70,4153,84],{"class":80},[70,4155,1568],{"class":80},[15,4157,4158,4159,4161],{},"Now we need to create an ",[52,4160,1574],{}," file which will be automatically loaded when our project runs.",[60,4163,4165],{"className":4164,"code":1580,"filename":1574,"language":1581,"meta":66},[1579],[52,4166,1580],{"__ignoreMap":66},[31,4168,4169],{},[15,4170,4171],{},"Do not forget to update with your actual database information",[15,4173,4174,4175,4178],{},"Okay, now let's update our ",[52,4176,4177],{},"app.module.file"," in order to benefit from the nest config features",[60,4180,4181],{"className":106,"code":1597,"filename":108,"language":109,"meta":66,"style":66},[52,4182,4183,4203,4223,4243,4263,4283,4307,4311,4321,4329,4353,4359,4371,4381,4391,4413,4427,4457,4487,4517,4547,4577,4587,4597,4605,4613,4619,4629,4639,4645,4655],{"__ignoreMap":66},[70,4184,4185,4187,4189,4191,4193,4195,4197,4199,4201],{"class":72,"line":73},[70,4186,117],{"class":116},[70,4188,121],{"class":120},[70,4190,125],{"class":124},[70,4192,128],{"class":120},[70,4194,131],{"class":116},[70,4196,134],{"class":120},[70,4198,137],{"class":80},[70,4200,140],{"class":120},[70,4202,143],{"class":120},[70,4204,4205,4207,4209,4211,4213,4215,4217,4219,4221],{"class":72,"line":146},[70,4206,117],{"class":116},[70,4208,121],{"class":120},[70,4210,153],{"class":124},[70,4212,128],{"class":120},[70,4214,131],{"class":116},[70,4216,134],{"class":120},[70,4218,162],{"class":80},[70,4220,140],{"class":120},[70,4222,143],{"class":120},[70,4224,4225,4227,4229,4231,4233,4235,4237,4239,4241],{"class":72,"line":169},[70,4226,117],{"class":116},[70,4228,121],{"class":120},[70,4230,176],{"class":124},[70,4232,128],{"class":120},[70,4234,131],{"class":116},[70,4236,134],{"class":120},[70,4238,185],{"class":80},[70,4240,140],{"class":120},[70,4242,143],{"class":120},[70,4244,4245,4247,4249,4251,4253,4255,4257,4259,4261],{"class":72,"line":192},[70,4246,117],{"class":116},[70,4248,121],{"class":120},[70,4250,199],{"class":124},[70,4252,128],{"class":120},[70,4254,131],{"class":116},[70,4256,134],{"class":120},[70,4258,208],{"class":80},[70,4260,140],{"class":120},[70,4262,143],{"class":120},[70,4264,4265,4267,4269,4271,4273,4275,4277,4279,4281],{"class":72,"line":215},[70,4266,117],{"class":116},[70,4268,121],{"class":120},[70,4270,222],{"class":124},[70,4272,128],{"class":120},[70,4274,131],{"class":116},[70,4276,134],{"class":120},[70,4278,54],{"class":80},[70,4280,140],{"class":120},[70,4282,143],{"class":120},[70,4284,4285,4287,4289,4291,4293,4295,4297,4299,4301,4303,4305],{"class":72,"line":237},[70,4286,117],{"class":116},[70,4288,121],{"class":120},[70,4290,1708],{"class":124},[70,4292,416],{"class":120},[70,4294,1713],{"class":124},[70,4296,128],{"class":120},[70,4298,131],{"class":116},[70,4300,134],{"class":120},[70,4302,1722],{"class":80},[70,4304,140],{"class":120},[70,4306,143],{"class":120},[70,4308,4309],{"class":72,"line":244},[70,4310,241],{"emptyLinePlaceholder":240},[70,4312,4313,4315,4317,4319],{"class":72,"line":260},[70,4314,247],{"class":120},[70,4316,251],{"class":250},[70,4318,254],{"class":124},[70,4320,257],{"class":120},[70,4322,4323,4325,4327],{"class":72,"line":273},[70,4324,264],{"class":263},[70,4326,267],{"class":120},[70,4328,270],{"class":124},[70,4330,4331,4333,4335,4337,4339,4341,4343,4345,4347,4349,4351],{"class":72,"line":282},[70,4332,1753],{"class":124},[70,4334,26],{"class":120},[70,4336,290],{"class":250},[70,4338,254],{"class":124},[70,4340,672],{"class":120},[70,4342,1764],{"class":263},[70,4344,267],{"class":120},[70,4346,401],{"class":400},[70,4348,128],{"class":120},[70,4350,429],{"class":124},[70,4352,279],{"class":120},[70,4354,4355,4357],{"class":72,"line":297},[70,4356,276],{"class":124},[70,4358,279],{"class":120},[70,4360,4361,4363,4365,4367,4369],{"class":72,"line":314},[70,4362,285],{"class":124},[70,4364,26],{"class":120},[70,4366,1789],{"class":250},[70,4368,254],{"class":124},[70,4370,257],{"class":120},[70,4372,4373,4375,4377,4379],{"class":72,"line":331},[70,4374,1798],{"class":263},[70,4376,267],{"class":120},[70,4378,1803],{"class":124},[70,4380,279],{"class":120},[70,4382,4383,4385,4387,4389],{"class":72,"line":345},[70,4384,1810],{"class":263},[70,4386,267],{"class":120},[70,4388,1815],{"class":124},[70,4390,279],{"class":120},[70,4392,4393,4395,4397,4399,4401,4403,4405,4407,4409,4411],{"class":72,"line":362},[70,4394,1822],{"class":250},[70,4396,267],{"class":120},[70,4398,1827],{"class":120},[70,4400,1830],{"class":1175},[70,4402,267],{"class":120},[70,4404,1713],{"class":76},[70,4406,429],{"class":120},[70,4408,1839],{"class":483},[70,4410,1827],{"class":124},[70,4412,257],{"class":120},[70,4414,4415,4417,4419,4421,4423,4425],{"class":72,"line":375},[70,4416,1848],{"class":263},[70,4418,267],{"class":120},[70,4420,134],{"class":120},[70,4422,307],{"class":80},[70,4424,140],{"class":120},[70,4426,279],{"class":120},[70,4428,4429,4431,4433,4435,4437,4439,4441,4443,4445,4447,4449,4451,4453,4455],{"class":72,"line":392},[70,4430,1863],{"class":263},[70,4432,267],{"class":120},[70,4434,1868],{"class":124},[70,4436,26],{"class":120},[70,4438,1873],{"class":250},[70,4440,1183],{"class":120},[70,4442,1878],{"class":76},[70,4444,1289],{"class":120},[70,4446,254],{"class":124},[70,4448,140],{"class":120},[70,4450,1887],{"class":80},[70,4452,140],{"class":120},[70,4454,429],{"class":124},[70,4456,279],{"class":120},[70,4458,4459,4461,4463,4465,4467,4469,4471,4473,4475,4477,4479,4481,4483,4485],{"class":72,"line":406},[70,4460,1898],{"class":263},[70,4462,267],{"class":120},[70,4464,1868],{"class":124},[70,4466,26],{"class":120},[70,4468,1873],{"class":250},[70,4470,1183],{"class":120},[70,4472,1911],{"class":76},[70,4474,1289],{"class":120},[70,4476,254],{"class":124},[70,4478,140],{"class":120},[70,4480,1920],{"class":80},[70,4482,140],{"class":120},[70,4484,429],{"class":124},[70,4486,279],{"class":120},[70,4488,4489,4491,4493,4495,4497,4499,4501,4503,4505,4507,4509,4511,4513,4515],{"class":72,"line":423},[70,4490,1931],{"class":263},[70,4492,267],{"class":120},[70,4494,1868],{"class":124},[70,4496,26],{"class":120},[70,4498,1873],{"class":250},[70,4500,1183],{"class":120},[70,4502,1878],{"class":76},[70,4504,1289],{"class":120},[70,4506,254],{"class":124},[70,4508,140],{"class":120},[70,4510,1952],{"class":80},[70,4512,140],{"class":120},[70,4514,429],{"class":124},[70,4516,279],{"class":120},[70,4518,4519,4521,4523,4525,4527,4529,4531,4533,4535,4537,4539,4541,4543,4545],{"class":72,"line":434},[70,4520,1963],{"class":263},[70,4522,267],{"class":120},[70,4524,1868],{"class":124},[70,4526,26],{"class":120},[70,4528,1873],{"class":250},[70,4530,1183],{"class":120},[70,4532,1878],{"class":76},[70,4534,1289],{"class":120},[70,4536,254],{"class":124},[70,4538,140],{"class":120},[70,4540,1984],{"class":80},[70,4542,140],{"class":120},[70,4544,429],{"class":124},[70,4546,279],{"class":120},[70,4548,4549,4551,4553,4555,4557,4559,4561,4563,4565,4567,4569,4571,4573,4575],{"class":72,"line":442},[70,4550,1995],{"class":263},[70,4552,267],{"class":120},[70,4554,1868],{"class":124},[70,4556,26],{"class":120},[70,4558,1873],{"class":250},[70,4560,1183],{"class":120},[70,4562,1878],{"class":76},[70,4564,1289],{"class":120},[70,4566,254],{"class":124},[70,4568,140],{"class":120},[70,4570,2016],{"class":80},[70,4572,140],{"class":120},[70,4574,429],{"class":124},[70,4576,279],{"class":120},[70,4578,4579,4581,4583,4585],{"class":72,"line":455},[70,4580,2027],{"class":263},[70,4582,267],{"class":120},[70,4584,401],{"class":400},[70,4586,279],{"class":120},[70,4588,4589,4591,4593,4595],{"class":72,"line":468},[70,4590,2038],{"class":263},[70,4592,267],{"class":120},[70,4594,401],{"class":400},[70,4596,279],{"class":120},[70,4598,4599,4601,4603],{"class":72,"line":477},[70,4600,2049],{"class":120},[70,4602,429],{"class":124},[70,4604,279],{"class":120},[70,4606,4607,4609,4611],{"class":72,"line":493},[70,4608,426],{"class":120},[70,4610,429],{"class":124},[70,4612,279],{"class":120},[70,4614,4615,4617],{"class":72,"line":771},[70,4616,437],{"class":124},[70,4618,279],{"class":120},[70,4620,4621,4623,4625,4627],{"class":72,"line":1360},[70,4622,445],{"class":263},[70,4624,267],{"class":120},[70,4626,450],{"class":124},[70,4628,279],{"class":120},[70,4630,4631,4633,4635,4637],{"class":72,"line":1366},[70,4632,458],{"class":263},[70,4634,267],{"class":120},[70,4636,463],{"class":124},[70,4638,279],{"class":120},[70,4640,4641,4643],{"class":72,"line":1372},[70,4642,471],{"class":120},[70,4644,474],{"class":124},[70,4646,4647,4649,4651,4653],{"class":72,"line":1401},[70,4648,480],{"class":116},[70,4650,484],{"class":483},[70,4652,487],{"class":76},[70,4654,490],{"class":120},[70,4656,4657],{"class":72,"line":1406},[70,4658,496],{"class":120},[15,4660,4661],{},"That's it, we've just made our lives easier with the nest\u002Fconfiguration package. But I don't know if you are also a data\nvalidation freak. In short, I show you how we can validate the values in an .env file",[2114,4663,4665],{"id":4664},"schema-validation","Schema validation",[15,4667,4668],{},"If required environment variables are not provided or do not meet specific validation requirements, it is usual practice\nto throw an exception during program starting.",[15,4670,4671],{},"Let's manage this quickly:",[60,4673,4674],{"className":62,"code":2126,"filename":64,"language":65,"meta":66,"style":66},[52,4675,4676],{"__ignoreMap":66},[70,4677,4678,4680,4682,4684],{"class":72,"line":73},[70,4679,77],{"class":76},[70,4681,81],{"class":80},[70,4683,84],{"class":80},[70,4685,2139],{"class":80},[15,4687,4688,4689,4691],{},"Now we can define a Joi validation schema and pass it via the validationSchema property of the ",[52,4690,2149],{}," method's\noption object, as shown below:",[60,4693,4694],{"className":106,"code":2153,"filename":108,"language":109,"meta":66,"style":66},[52,4695,4696,4716,4736,4756,4776,4796,4820,4840,4844,4854,4862,4868,4880,4890,4906,4928,4950,4972,4994,5016,5024,5032,5044,5054,5064,5086,5100,5130,5160,5190,5220,5250,5260,5270,5278,5286,5292,5302,5312,5318,5328],{"__ignoreMap":66},[70,4697,4698,4700,4702,4704,4706,4708,4710,4712,4714],{"class":72,"line":73},[70,4699,117],{"class":116},[70,4701,121],{"class":120},[70,4703,125],{"class":124},[70,4705,128],{"class":120},[70,4707,131],{"class":116},[70,4709,134],{"class":120},[70,4711,137],{"class":80},[70,4713,140],{"class":120},[70,4715,143],{"class":120},[70,4717,4718,4720,4722,4724,4726,4728,4730,4732,4734],{"class":72,"line":146},[70,4719,117],{"class":116},[70,4721,121],{"class":120},[70,4723,153],{"class":124},[70,4725,128],{"class":120},[70,4727,131],{"class":116},[70,4729,134],{"class":120},[70,4731,162],{"class":80},[70,4733,140],{"class":120},[70,4735,143],{"class":120},[70,4737,4738,4740,4742,4744,4746,4748,4750,4752,4754],{"class":72,"line":169},[70,4739,117],{"class":116},[70,4741,121],{"class":120},[70,4743,176],{"class":124},[70,4745,128],{"class":120},[70,4747,131],{"class":116},[70,4749,134],{"class":120},[70,4751,185],{"class":80},[70,4753,140],{"class":120},[70,4755,143],{"class":120},[70,4757,4758,4760,4762,4764,4766,4768,4770,4772,4774],{"class":72,"line":192},[70,4759,117],{"class":116},[70,4761,121],{"class":120},[70,4763,199],{"class":124},[70,4765,128],{"class":120},[70,4767,131],{"class":116},[70,4769,134],{"class":120},[70,4771,208],{"class":80},[70,4773,140],{"class":120},[70,4775,143],{"class":120},[70,4777,4778,4780,4782,4784,4786,4788,4790,4792,4794],{"class":72,"line":215},[70,4779,117],{"class":116},[70,4781,121],{"class":120},[70,4783,222],{"class":124},[70,4785,128],{"class":120},[70,4787,131],{"class":116},[70,4789,134],{"class":120},[70,4791,54],{"class":80},[70,4793,140],{"class":120},[70,4795,143],{"class":120},[70,4797,4798,4800,4802,4804,4806,4808,4810,4812,4814,4816,4818],{"class":72,"line":237},[70,4799,117],{"class":116},[70,4801,121],{"class":120},[70,4803,1708],{"class":124},[70,4805,416],{"class":120},[70,4807,1713],{"class":124},[70,4809,128],{"class":120},[70,4811,131],{"class":116},[70,4813,134],{"class":120},[70,4815,1722],{"class":80},[70,4817,140],{"class":120},[70,4819,143],{"class":120},[70,4821,4822,4824,4826,4828,4830,4832,4834,4836,4838],{"class":72,"line":244},[70,4823,117],{"class":116},[70,4825,2286],{"class":120},[70,4827,2289],{"class":116},[70,4829,2292],{"class":124},[70,4831,2295],{"class":116},[70,4833,134],{"class":120},[70,4835,2300],{"class":80},[70,4837,140],{"class":120},[70,4839,143],{"class":120},[70,4841,4842],{"class":72,"line":260},[70,4843,241],{"emptyLinePlaceholder":240},[70,4845,4846,4848,4850,4852],{"class":72,"line":273},[70,4847,247],{"class":120},[70,4849,251],{"class":250},[70,4851,254],{"class":124},[70,4853,257],{"class":120},[70,4855,4856,4858,4860],{"class":72,"line":282},[70,4857,264],{"class":263},[70,4859,267],{"class":120},[70,4861,270],{"class":124},[70,4863,4864,4866],{"class":72,"line":297},[70,4865,276],{"class":124},[70,4867,279],{"class":120},[70,4869,4870,4872,4874,4876,4878],{"class":72,"line":314},[70,4871,1753],{"class":124},[70,4873,26],{"class":120},[70,4875,290],{"class":250},[70,4877,254],{"class":124},[70,4879,257],{"class":120},[70,4881,4882,4884,4886,4888],{"class":72,"line":331},[70,4883,2349],{"class":263},[70,4885,267],{"class":120},[70,4887,401],{"class":400},[70,4889,279],{"class":120},[70,4891,4892,4894,4896,4898,4900,4902,4904],{"class":72,"line":345},[70,4893,2360],{"class":263},[70,4895,267],{"class":120},[70,4897,2365],{"class":124},[70,4899,26],{"class":120},[70,4901,2370],{"class":250},[70,4903,254],{"class":124},[70,4905,257],{"class":120},[70,4907,4908,4910,4912,4914,4916,4918,4920,4922,4924,4926],{"class":72,"line":362},[70,4909,2379],{"class":263},[70,4911,267],{"class":120},[70,4913,2365],{"class":124},[70,4915,26],{"class":120},[70,4917,1878],{"class":250},[70,4919,1312],{"class":124},[70,4921,26],{"class":120},[70,4923,2394],{"class":250},[70,4925,1312],{"class":124},[70,4927,279],{"class":120},[70,4929,4930,4932,4934,4936,4938,4940,4942,4944,4946,4948],{"class":72,"line":375},[70,4931,2403],{"class":263},[70,4933,267],{"class":120},[70,4935,2365],{"class":124},[70,4937,26],{"class":120},[70,4939,1911],{"class":250},[70,4941,1312],{"class":124},[70,4943,26],{"class":120},[70,4945,2394],{"class":250},[70,4947,1312],{"class":124},[70,4949,279],{"class":120},[70,4951,4952,4954,4956,4958,4960,4962,4964,4966,4968,4970],{"class":72,"line":392},[70,4953,2426],{"class":263},[70,4955,267],{"class":120},[70,4957,2365],{"class":124},[70,4959,26],{"class":120},[70,4961,1878],{"class":250},[70,4963,1312],{"class":124},[70,4965,26],{"class":120},[70,4967,2394],{"class":250},[70,4969,1312],{"class":124},[70,4971,279],{"class":120},[70,4973,4974,4976,4978,4980,4982,4984,4986,4988,4990,4992],{"class":72,"line":406},[70,4975,2449],{"class":263},[70,4977,267],{"class":120},[70,4979,2365],{"class":124},[70,4981,26],{"class":120},[70,4983,1878],{"class":250},[70,4985,1312],{"class":124},[70,4987,26],{"class":120},[70,4989,2394],{"class":250},[70,4991,1312],{"class":124},[70,4993,279],{"class":120},[70,4995,4996,4998,5000,5002,5004,5006,5008,5010,5012,5014],{"class":72,"line":423},[70,4997,2472],{"class":263},[70,4999,267],{"class":120},[70,5001,2365],{"class":124},[70,5003,26],{"class":120},[70,5005,1878],{"class":250},[70,5007,1312],{"class":124},[70,5009,26],{"class":120},[70,5011,2394],{"class":250},[70,5013,1312],{"class":124},[70,5015,279],{"class":120},[70,5017,5018,5020,5022],{"class":72,"line":434},[70,5019,2049],{"class":120},[70,5021,429],{"class":124},[70,5023,279],{"class":120},[70,5025,5026,5028,5030],{"class":72,"line":442},[70,5027,426],{"class":120},[70,5029,429],{"class":124},[70,5031,279],{"class":120},[70,5033,5034,5036,5038,5040,5042],{"class":72,"line":455},[70,5035,285],{"class":124},[70,5037,26],{"class":120},[70,5039,1789],{"class":250},[70,5041,254],{"class":124},[70,5043,257],{"class":120},[70,5045,5046,5048,5050,5052],{"class":72,"line":468},[70,5047,1798],{"class":263},[70,5049,267],{"class":120},[70,5051,1803],{"class":124},[70,5053,279],{"class":120},[70,5055,5056,5058,5060,5062],{"class":72,"line":477},[70,5057,1810],{"class":263},[70,5059,267],{"class":120},[70,5061,1815],{"class":124},[70,5063,279],{"class":120},[70,5065,5066,5068,5070,5072,5074,5076,5078,5080,5082,5084],{"class":72,"line":493},[70,5067,1822],{"class":250},[70,5069,267],{"class":120},[70,5071,1827],{"class":120},[70,5073,1830],{"class":1175},[70,5075,267],{"class":120},[70,5077,1713],{"class":76},[70,5079,429],{"class":120},[70,5081,1839],{"class":483},[70,5083,1827],{"class":124},[70,5085,257],{"class":120},[70,5087,5088,5090,5092,5094,5096,5098],{"class":72,"line":771},[70,5089,1848],{"class":263},[70,5091,267],{"class":120},[70,5093,134],{"class":120},[70,5095,307],{"class":80},[70,5097,140],{"class":120},[70,5099,279],{"class":120},[70,5101,5102,5104,5106,5108,5110,5112,5114,5116,5118,5120,5122,5124,5126,5128],{"class":72,"line":1360},[70,5103,1863],{"class":263},[70,5105,267],{"class":120},[70,5107,1868],{"class":124},[70,5109,26],{"class":120},[70,5111,1873],{"class":250},[70,5113,1183],{"class":120},[70,5115,1878],{"class":76},[70,5117,1289],{"class":120},[70,5119,254],{"class":124},[70,5121,140],{"class":120},[70,5123,1887],{"class":80},[70,5125,140],{"class":120},[70,5127,429],{"class":124},[70,5129,279],{"class":120},[70,5131,5132,5134,5136,5138,5140,5142,5144,5146,5148,5150,5152,5154,5156,5158],{"class":72,"line":1366},[70,5133,1898],{"class":263},[70,5135,267],{"class":120},[70,5137,1868],{"class":124},[70,5139,26],{"class":120},[70,5141,1873],{"class":250},[70,5143,1183],{"class":120},[70,5145,1911],{"class":76},[70,5147,1289],{"class":120},[70,5149,254],{"class":124},[70,5151,140],{"class":120},[70,5153,1920],{"class":80},[70,5155,140],{"class":120},[70,5157,429],{"class":124},[70,5159,279],{"class":120},[70,5161,5162,5164,5166,5168,5170,5172,5174,5176,5178,5180,5182,5184,5186,5188],{"class":72,"line":1372},[70,5163,1931],{"class":263},[70,5165,267],{"class":120},[70,5167,1868],{"class":124},[70,5169,26],{"class":120},[70,5171,1873],{"class":250},[70,5173,1183],{"class":120},[70,5175,1878],{"class":76},[70,5177,1289],{"class":120},[70,5179,254],{"class":124},[70,5181,140],{"class":120},[70,5183,1952],{"class":80},[70,5185,140],{"class":120},[70,5187,429],{"class":124},[70,5189,279],{"class":120},[70,5191,5192,5194,5196,5198,5200,5202,5204,5206,5208,5210,5212,5214,5216,5218],{"class":72,"line":1401},[70,5193,1963],{"class":263},[70,5195,267],{"class":120},[70,5197,1868],{"class":124},[70,5199,26],{"class":120},[70,5201,1873],{"class":250},[70,5203,1183],{"class":120},[70,5205,1878],{"class":76},[70,5207,1289],{"class":120},[70,5209,254],{"class":124},[70,5211,140],{"class":120},[70,5213,1984],{"class":80},[70,5215,140],{"class":120},[70,5217,429],{"class":124},[70,5219,279],{"class":120},[70,5221,5222,5224,5226,5228,5230,5232,5234,5236,5238,5240,5242,5244,5246,5248],{"class":72,"line":1406},[70,5223,1995],{"class":263},[70,5225,267],{"class":120},[70,5227,1868],{"class":124},[70,5229,26],{"class":120},[70,5231,1873],{"class":250},[70,5233,1183],{"class":120},[70,5235,1878],{"class":76},[70,5237,1289],{"class":120},[70,5239,254],{"class":124},[70,5241,140],{"class":120},[70,5243,2016],{"class":80},[70,5245,140],{"class":120},[70,5247,429],{"class":124},[70,5249,279],{"class":120},[70,5251,5252,5254,5256,5258],{"class":72,"line":1411},[70,5253,2027],{"class":263},[70,5255,267],{"class":120},[70,5257,401],{"class":400},[70,5259,279],{"class":120},[70,5261,5262,5264,5266,5268],{"class":72,"line":1440},[70,5263,2038],{"class":263},[70,5265,267],{"class":120},[70,5267,401],{"class":400},[70,5269,279],{"class":120},[70,5271,5272,5274,5276],{"class":72,"line":1446},[70,5273,2049],{"class":120},[70,5275,429],{"class":124},[70,5277,279],{"class":120},[70,5279,5280,5282,5284],{"class":72,"line":1474},[70,5281,426],{"class":120},[70,5283,429],{"class":124},[70,5285,279],{"class":120},[70,5287,5288,5290],{"class":72,"line":1479},[70,5289,437],{"class":124},[70,5291,279],{"class":120},[70,5293,5294,5296,5298,5300],{"class":72,"line":1484},[70,5295,445],{"class":263},[70,5297,267],{"class":120},[70,5299,450],{"class":124},[70,5301,279],{"class":120},[70,5303,5304,5306,5308,5310],{"class":72,"line":1504},[70,5305,458],{"class":263},[70,5307,267],{"class":120},[70,5309,463],{"class":124},[70,5311,279],{"class":120},[70,5313,5314,5316],{"class":72,"line":1510},[70,5315,471],{"class":120},[70,5317,474],{"class":124},[70,5319,5320,5322,5324,5326],{"class":72,"line":1534},[70,5321,480],{"class":116},[70,5323,484],{"class":483},[70,5325,487],{"class":76},[70,5327,490],{"class":120},[70,5329,5330],{"class":72,"line":1539},[70,5331,496],{"class":120},[31,5333,5334],{},[15,5335,5336],{},"Trust me, you should get in the habit of validating the .env file to avoid running into problems in production",[10,5338,5340],{"id":5339},"summary","Summary",[15,5342,5343],{},"In this post, we set out to integrate NestJS with PostgresSQL, an open-source relational database.\nWe learnt how to\ncreate a smooth link between our NestJS application and the database using TypeORM, providing the groundwork for\ndata-driven apps that are efficient and maintainable.",[15,5345,5346],{},"We covered crucial tasks throughout this lesson, such as creating the database connection, defining database entities,\nand running queries to conduct CRUD operations. We learned more about how NestJS and TypeORM work together to streamline\ndatabase interactions, making it easier than ever to design scalable and performant APIs.",[15,5348,5349],{},"In the next post, we'll learn together how to implement the OneToOne, OneToMany and ManyToMany relationships using\nTypeORM and PostgresSQL",[15,5351,5352],{},"Stay tuned !!",[2832,5354,2834],{},{"title":66,"searchDepth":146,"depth":146,"links":5356},[5357,5358,5359,5360,5361,5364],{"id":12,"depth":146,"text":13},{"id":2887,"depth":146,"text":2888},{"id":3225,"depth":146,"text":3226},{"id":3463,"depth":146,"text":3464},{"id":4134,"depth":146,"text":4135,"children":5362},[5363],{"id":4664,"depth":169,"text":4665},{"id":5339,"depth":146,"text":5340},"Learn the Essential Steps to Master NestJS and Leverage TypeORM for Robust Database Connectivity in Your Projects.",{},"\u002Fbackend\u002Fnest-js\u002Fconecting-nestjs-to-postgres-database",{"title":2864,"description":5365},"2.backend\u002F1.nest-js\u002F3.conecting-nestjs-to-postgres-database",[2855,2856,2857],[2859,2860],"7qaLZLavWNx7JiAbudtvZRqHCTsJLitKN7dsTsBbZwo",[5374,5377],{"title":5375,"path":5376},"Maîtriser NestJS : comprendre Services, Modules et Contrôleurs","\u002Fbackend\u002Fnest-js\u002Funderstanding-services-modules-and-controllers.fr",{"title":5378,"path":5379},"Maîtriser NestJS : libérer la puissance des relations avec TypeORM et les bases SQL","\u002Fbackend\u002Fnest-js\u002Funlocking-the-power-of-relationships-with-typeorm.fr",[5381,5386,5391],{"path":5379,"title":5378,"description":5382,"date":5383,"tags":5384,"topics":5385},"Libère la puissance des relations de données avec NestJS, TypeORM et les bases SQL. Maîtrise l'art de construire des structures de données complexes et des interactions fluides. Idéal pour les développeurs NestJS expérimentés comme pour les débutants qui veulent créer des applications à la pointe.","2023-10-18",[2855,2856,2857],[2860,2859],{"path":5376,"title":5375,"description":5387,"date":5388,"tags":5389,"topics":5390},"Apprends les composants essentiels de NestJS pour construire des applications serveur scalables. Examine le rôle des services, modules et contrôleurs en exploitant les capacités des DTO (Data Transfer Objects) pour la validation et le renforcement de la sécurité.","2023-09-03",[2855,2856,2857],[2860,2859],{"path":5392,"title":5393,"description":5394,"date":5395,"tags":5396,"topics":5397},"\u002Fbackend\u002Fnest-js\u002Fintroducing-nest-js.fr","Maîtriser NestJS : ton guide ultime du développement backend moderne","Explore NestJS, un framework Node.js moderne, dans cette introduction complète. Rejoins notre série pour maîtriser l'architecture modulaire, les contrôleurs, providers, services, et plus encore. Construis des applications backend scalables en toute confiance. Bienvenue dans la partie 1 de la série NestJS !","2023-08-23",[2855,2856,2857],[2860,2859],1780074488836]