עקוב אחר הדרכה זו כדי ללמוד על כמה טכנולוגיות מרגשות ומשלימות בהן תוכל להשתמש בפרויקט הבא שלך.

כמו מסגרות אחרות של Node.js, Nest.js מספק ערכת כלים מקיפה לבניית שירותי קצה חזקים וניתנים להרחבה. עם זאת, חשוב להבין כיצד ליישם את היצירה, קריאה, עדכון ומחיקה פעולות (CRUD) ב-Nest.js בצורה יעילה - אלו הן הפעולות הבסיסיות ביותר בפיתוח של ממשקי API.

למד כיצד לבנות Nest.js CRUD REST API באמצעות TypeORM ומסד נתונים PostgreSQL.

תחילת העבודה עם Nest.js

כדי להתחיל, התקן את כלי שורת הפקודה Nest.js:

npm i -g @nestjs/cli

לאחר מכן, צור פרויקט חדש על ידי הפעלת:

קן אפליקציה חדשה של crud

כלי ה-CLI יבקש ממך לבחור מנהל חבילות, לבחור את האפשרות שנראית לך העדיפה ביותר. אנחנו נשתמש npm, מנהל חבילות ה-Node.

ה-CLI יטם פרויקט Nest.js בסיסי עם כל קבצי התצורה הנדרשים והתלות הראשונית הנדרשים להפעלת האפליקציה.

לבסוף, נווט אל ספריית הפרויקט והפעל את שרת הפיתוח.

cd crud-app
הפעלת npm run

אתה יכול למצוא את הקוד של הפרויקט הזה בו GitHub מאגר.

צור מסד נתונים PostgreSQL

מדריך זה משתמש במופע PostgreSQL בענן, אך במקום זאת ניתן להגדיר מסד נתונים מקומי של PostgreSQL. אתה יכול התקן PostgreSQL ב-Windows, ב-macOS, או בלינוקס.

instagram viewer

כדי להגדיר מופע PostgreSQL בענן:

  1. פנה אל ElephantSQL, הירשם והיכנס לדף הסקירה הכללית של חשבונך.
  2. לחץ על צור מופע חדש לחצן בחלק השמאלי העליון של הדף כדי ליצור מופע חדש עבור היישום שלך.
  3. מלא את שם המופע שלך, בחר את התוכנית החינמית, ולבסוף בחר את האזור להשלמת תהליך ההגדרה.
  4. לאחר יצירת מופע מסד הנתונים, עבור אל הגדרות עמוד, והעתק את הקובץ שסופק כתובת האתר של מסד הנתונים.

הגדר את חיבור מסד הנתונים

בספריית השורש של הפרויקט שלך, צור א .env קובץ והדבק את כתובת האתר של חיבור מסד הנתונים באופן הבא:

DATABASE_URL=""

כעת התקן את החבילות הבאות:

npm התקן את pg typeorm @nestjs/typeorm @nestjs/config

לאחר מכן, קדימה, צור מודול מסד נתונים באמצעות הכלי CLI.

מסד נתונים של מודול nest g

פתח את ה database/database.module.ts קובץ והוסף את קוד תצורת מסד הנתונים הבא:

יְבוּא { מודול } מ'@nestjs/common';
יְבוּא { ConfigModule, ConfigService } מ'@nestjs/config';
יְבוּא { TypeOrmModule } מ'@nestjs/typeorm';
יְבוּא { משתמש } מ'../users/models/user.entity';

@מודול({
יבוא: [
TypeOrmModule.forRootAsync({
ייבוא: [ConfigModule],
inject: [ConfigService],

useFactory: אסינכרון (configService: ConfigService) => ({
סוּג: 'פוסטגרס',
כתובת אתר: configService.get('DATABASE_URL'),
ישויות: [משתמש],
לְסַנכְרֵן: נָכוֹן
}),
}),
],
})

יְצוּאמעמד DatabaseModule {}

מודול מסד נתונים זה מטפל בחיבור על ידי הגדרת מודול TypeORM עם פרמטר החיבור הנדרש, כתובת האתר של מסד הנתונים.

בנוסף, הוא מגדיר את ישות המשתמש כחלק מהתצורה המציינת את המבנה והמאפיינים של הנתונים המאוחסנים בטבלת מסד הנתונים PostgreSQL.

בשלב זה, הקוד שלך כנראה יזרוק שגיאה מכיוון שעדיין לא יצרת את ישות המשתמשים. תעשה זאת בשלבים הבאים.

עדכן את קובץ app.module.ts

לבסוף, עדכן את מודול היישום הראשי כך שיכלול את התצורה של מודול מסד הנתונים.

יְבוּא { מודול } מ'@nestjs/common';
יְבוּא { ConfigModule } מ'@nestjs/config';
יְבוּא { AppController } מ'./app.controller';
יְבוּא { AppService } מ'./app.service';
יְבוּא { DatabaseModule } מ'./database/database.module';

@מודול({
יבוא: [
ConfigModule.forRoot({
envFilePath: '.env',
}),
DatabaseModule,
],

בקרים: [AppController],
ספקים: [AppService],
})

יְצוּאמעמד AppModule {}

הגדר מודול משתמשים

מודול המשתמשים משמש כרכיב מרוכז, שאחראי להקפיא ולניהול ההיגיון הנדרש ליישום פונקציונליות ה-CRUD של ה-API.

הפעל את פקודת הטרמינל הזו כדי ליצור את מודול המשתמשים של ה-API.

משתמשי מודול Nest g

כלי CLI מעדכן אוטומטית את app.module.ts קובץ לשקף את השינויים שבוצעו, בנוסף ליצירת מודול המשתמש. זה מבטיח שהמודול החדש שנוצר, משתמשים, משולב כראוי בתצורת המודול של היישום.

צור ישות משתמש

TypeORM היא ספריית מיפוי אובייקטים-יחסי (ORM) המפשטת אינטראקציות של מסד נתונים ביישומים המשתמשים ב-TypeScript על ידי מיפוי אובייקטי JavaScript לטבלאות מסד נתונים.

על ידי יצירת ישות משתמש באמצעות TypeORM, אתה מגדיר את המבנה והמאפיינים של נתוני המשתמש במסד הנתונים של PostgreSQL.

בספריית המשתמשים, צור חדש models/user.entity.ts והוסיפו את הקוד הבא.

יְבוּא { ישות, PrimaryGeneratedColumn, Column, } מ"צורת טיפוס";

@יֵשׁוּת()
יְצוּאמעמד משתמש {
@PrimaryGeneratedColumn()
תְעוּדַת זֶהוּת: מספר;

@טור()
שֵׁם: חוּט;

@טור()
אימייל: חוּט;
}

ה מִשׁתַמֵשׁ ישות מגדירה את המבנה של נתוני המשתמש המאוחסנים במסד הנתונים. במקרה הזה, זה ה תְעוּדַת זֶהוּת בתור עמודת המפתח הראשי, וה- שֵׁם ו אימייל עמודות והמאפיינים התואמים להן.

צור את שירות ה-API של CRUD

כעת, צור את שירות ה-API שינהל את ההיגיון עבור פעולות ה-CRUD על ידי הפעלת הפקודה למטה:

משתמשי שירות Nest g

פתח את ה user-auth.service.ts קובץ והוסף את הקוד הזה:

יְבוּא { הזרקה } מ'@nestjs/common';
יְבוּא { InjectRepository } מ'@nestjs/typeorm';
יְבוּא { מאגר } מ'טיפוס';
יְבוּא {מִשׁתַמֵשׁ} מ'./models/user.entity';

@ניתן להזרקה()
יְצוּאמעמד UsersService {
בַּנַאִי(
@InjectRepository(מִשׁתַמֵשׁ)
פְּרָטִי userRepository: מאגר,
) {}

אסינכרון מצא הכל(): הַבטָחָה {
לַחֲזוֹרזֶה‎.userRepository.find();
}

אסינכרון findOne (מזהה: מספר): הַבטָחָה {
לַחֲזוֹרזֶה.userRepository.findOne({ where: { id } });
}

אסינכרון צור (משתמש: חלקי): הַבטָחָה {
const משתמש חדש = זֶה.userRepository.create (משתמש);
לַחֲזוֹרזֶה.userRepository.save (משתמש חדש);
}

אסינכרון עדכון (מזהה: מספר, משתמש: חלקי): הַבטָחָה {
לְהַמתִיןזֶה.userRepository.update (מזהה, משתמש);
לַחֲזוֹרזֶה.userRepository.findOne({ where: { id } });
}

אסינכרוןלִמְחוֹק(תְעוּדַת זֶהוּת: מספר): הַבטָחָה<בָּטֵל> {
לְהַמתִיןזֶה.userRepository.delete (מזהה);
}
}

מחלקה UsersService זו מגדירה שיטות API שונות המיועדות לטיפול בפעולות CRUD. שיטות אלו כוללות שליפת כל הנתונים של המשתמשים, מציאת משתמש ספציפי באמצעות מספר הזהות שלו, יצירה משתמש חדש, עדכון משתמש קיים ושיטה למחיקת נתוני משתמש ספציפי במסד הנתונים.

הגדר בקר עבור ה-API

צור בקר שינהל את נקודות הקצה של ה-API עבור הפעולות הקשורות למשתמש.

משתמשי בקר nest g

לאחר מכן, הוסף את הקוד למטה ל- users.controller.ts קוֹבֶץ.

יְבוּא { Controller, Get, Post, Body, Put, Param, Delete, NotFoundException, HttpCode } מ'@nestjs/common';
יְבוּא { UsersService } מ'./users.service';
יְבוּא { משתמש } מ'./models/user.entity';

@בקר('ממשק API/משתמשים')
יְצוּאמעמד UsersController {
בַּנַאִי(פְּרָטִי UsersService לקריאה בלבד) {}

@לקבל()
אסינכרון מצא הכל(): הַבטָחָה {
לַחֲזוֹרזֶה.usersService.findAll();
}

@הודעה()
@HttpCode(201)
אסינכרון לִיצוֹר(@גוּף() משתמש: משתמש): הַבטָחָה {
const CreatedUser = לְהַמתִיןזֶה.usersService.create (משתמש);
לַחֲזוֹר נוצר משתמש;
}

@לָשִׂים(':תְעוּדַת זֶהוּת')
אסינכרון עדכון (@פארם('תְעוּדַת זֶהוּת') מזהה: מספר, @גוּף() משתמש: משתמש): הַבטָחָה<כל> {
לְהַמתִיןזֶה.usersService.update (מזהה, משתמש);
לַחֲזוֹר { הודעה: 'המשתמש עודכן בהצלחה' };
}

@לִמְחוֹק(':תְעוּדַת זֶהוּת')
אסינכרוןלִמְחוֹק(@פארם('תְעוּדַת זֶהוּת') מזהה: מספר): הַבטָחָה<כל> {
const משתמש = לְהַמתִיןזֶה.usersService.findOne (מזהה);

אם (!משתמש) {
לזרוקחָדָשׁ NotFoundException('משתמש לא קיים!');
}

לְהַמתִיןזֶה.usersService.delete (מזהה);
לַחֲזוֹר { הודעה: 'המשתמש נמחק בהצלחה' };
}
}

הבקר מנהל נקודות קצה API עבור פעולות המשתמש. הוא מטפל בבקשות GET לאחזור כל המשתמשים, בקשות POST ליצירת משתמשים חדשים, בקשות PUT לעדכון משתמשים קיימים ובקשות למחיקת משתמשים.

על ידי שימוש ב UsersService ואינטראקציה עם מִשׁתַמֵשׁ ישות, בקר זה מספק API מלא לניהול פעולות הקשורות למשתמש בנתונים המאוחסנים במסד הנתונים.

עדכן את קובץ users.module.ts

לבסוף, עדכן את ה users.module.ts קובץ כפי שמוצג להלן כדי להבטיח שאתה משלב את ישות משתמש ומודול TypeORM, שיוצר את החיבור למסד הנתונים.

יְבוּא { מודול } מ'@nestjs/common';
יְבוּא { UsersController } מ'./users.controller';
יְבוּא { UsersService } מ'./users.service';
יְבוּא { TypeOrmModule } מ'@nestjs/typeorm';
יְבוּא { משתמש } מ'./models/user.entity';

@מודול({
ייבוא: [TypeOrmModule.forFeature([משתמש])],
בקרים: [UsersController],
ספקים: [UsersService]
})

יְצוּאמעמד UsersModule {}

לבסוף, קדימה, וסובב את שרת הפיתוח כדי לבדוק את פעולות ה-CRUD באמצעות Postman.

הפעלת npm run

השרת יתחיל ביציאה 3000, ותוכל לשלוח אליו בקשות API בכתובת http://localhost: 3000/API/משתמשים.

בניית אפליקציות Backend עם Nest.js

בין אם אתה מפתח ממשק API פשוט של REST או אפליקציית אינטרנט מורכבת, Nest.js מציע סט מקיף של תכונות ויכולות לבניית מערכת עורפית אמינה וחזקה.

Nest.js מציע גישה מובנית יותר לפיתוח פרויקטים מאשר Express.js עושה. זה מבטיח שאתה יכול בביטחון לבנות, להרחיב ולתחזק יישומים מורכבים, הודות לדפוס העיצוב המאורגן והמודולרי שלו.