Giới thiệu về khóa học và tác giả, cũng như demo kết quả đạt được sau khi kết thúc khóahọc này.- Hiểurõ,thựchànhvàápdụngđượcngônngữTypescriptchodựánNestJS- XâydựngtưduyBackendvớitính“mởr
Trang 7- CầncókiếnthứcvềMongoDB(sửdụngvớiMongoose).Nếuchưabiết,bạncó
thểthamkhảokhóahọcnày:
mongodb?id=640b539cfe283eefef939870
https://hoidanit.com.vn/course/backend-restful-server-voi-nodejs-va-express-sql-Mộtvàiyêucầukiênquyết:
- CàiđặtmôitrườngNode.JS:trongkhóahọcnày,máytínhcủamìnhdùng
versionNode.JS16.20.0Đểhạnchếlỗi,cácbạnnêndùngversiontrên.(v16.20.0)CóthểdùngNVMđểsửdụngnhiềuversioncủaNode.JStrêncùngmáytínhVềNPM,xemtại:
https://www.youtube.com/watch?v=ccjKHLyo4lM&list=PLncHg6Kn2JT6E38Z3kit9Hnif1xC_9VqI&index=40
- CàiđặtGit:cácthaotácvớiGitvàsửdụngGithub,mìnhkhônghướngdẫn.Bạn
nàochưabiếtdùngGit,xemtạiđây:
https://www.youtube.com/watch?v=-BtolPy15fg&list=PLncHg6Kn2JT6nWS9MRjSnt6Z-9Rj0pAlo
- CàiđặtVisualStudioCode:đâylàcôngcụdùngđểcode
6
Trang 94 NẾUBẠNTHẤYKHÓAHỌCHAY,HÃYBIẾTDONATEĐỂỦNGHỘTÁCGIẢ.LINK
DONATE:https://hoidanit.github.io/official/donateHànhđộngnhỏnhưngmangýnghĩalớn.Hãyvì1cộngđồngITViệtNampháttriển.Nếulàmnhưcácbạn,cólẽchúngtađãkhôngcóIphone,khôngcóApplenhưngàynayrồi@@
8
Trang 11about:blank 11/190
Chapter1:TổngquanvềNest.JS
Giới thiệu tổng quan về Framework Nest.js và trả lời câu hỏi, tại sao chúng ta lại cần
Nest.JS, từ đấy viết chương trình Hello World với Framework này
Trang 16DựánNest.JSđượcchiathànhcácmodule,phântheochứcnăng
- Cầnchiatheomodule,đểcóthểpháttriểnđộclập,đồngthời,tínhnăngnàysẽít
ảnhhưởngtớitínhnăngkia(on/offtheoýmuốn)-
- Filemain.tssẽchạyappmodules,vàappmodulessẽbaogồmtấtcảcác
modulescon
-Modulesconcóthểbaogồm(hoặckhông)cácmoduleskhácVídụ:đểkếtnốitớidatabase,UsersModulescóthểbaogồmDatabaseModules
Trang 17about:blank 17/190
Chapter2:NestJSvàTypescript
Tìm hiểu và học cách sử dụng Decorator của Typescript vào Nest.JS, từ đấy nắm vững
cách hoạt động Router và Controller khi sử dụng các Decorator có sẵn do Nest.JS cung
Trang 21about:blank 21/190
#7.MôhìnhRoutervớiNest.JS
MôhìnhroutercủaNestJS:
20
Trang 25about:blank 25/190
Chapter3: InversionOfControl
Khi Học về OOP (lập trình hướng đối tượng), một trong các cách dùng để tối ưu hóa ứng
dụng là áp dụng mô hình IoC(Inversion of control) và DI (Dependency injection) Chương
này sẽ giúp chúng ta học cách sử dụng các “design pattern” trên vào framework Nest.JS
Trang 26}
Trang 33about:blank 33/190
Chapter4:NestJSvàMVC
NestJS cũng có đủ khả năng và sức mạnh để làm Server theo mô hình MVC truyền thống
Tại đây, chúng ta sẽ tìm hiểu về View Engine, cách viết code theo mô hình
Model-View-Controller và các nhược điểm đang còn tồn đọng của mô hình này
Trang 34-KhôngcóModel?
Trang 37about:blank 37/190
Chapter5:ConnectDatabase
Trong chương này, chúng ta sẽ cùng nhau kết nối backend tới Database bằng cách sử
dụng MongoDB Ngoài ra, sẽ tối ưu hóa cách sử dụng “hằng số”, dựa vào cách sử dụng
tham số môi trường (.env) với Nest.JS Config
Trang 42Ngoài khả năng có thể tạo server theo mô hình MVC, Nest.JS cũng có thể làm server
Restful APIs Chúng ta sẽ cùng nhau viết nhanh module Users theo đúng chuẩn Restful,
sử dụng các công cụ có sẵn của Nest.JS, bao gồm generate resources, schema,
Trang 49about:blank 49/190
Chapter7:StatefulvàStateless
Mọi website đều hoạt động dựa trên mô hình Stateful và Stateless Ở đây, chúng ta cần
nắm vững, hiểu rõ và có khả năng phân biệt điểm khác nhau của 2 mô hình này, bởi vì,
việc chúng ta lựa chọn mô hình nào, nó sẽ quyết định cách thức tổ chức code cho dự án
+login: /stateless/login =>truyềnbodygồmusernamevàpassword
+getusers /stateless/user =>cầntruyềnbearertokenởheaderrequest
48
Trang 50]
Trang 57about:blank 57/190
Chapter8:JWT-JsonWebToken
Sử dụng mô hình Stateless, server sẽ không có “session” để kiểm tra user có hợp lệ hay
không, nên JWT (Json web token) là một giải pháp rất phổ biến được dùng cho mô hình
này Ở đây, chúng ta sẽ tìm hiểu về JWT, cũng như áp dụng nó để xác thực người dùng
Trang 70LuồngprotectedroutesvớiJWT(cầntruyềnlênJWTởheaderrequest)
Trang 71about:blank 71/190
Chapter9:Tưduyphântíchdatabase
Giới thiệu đề tài dự án thực hành cuối khóa, cũng như tư duy phân tích database, cách
thiết kế table và mối quan hệ giữa các đối tượng trong dự án thực hành
Trang 77about:blank 77/190
Chapter10:MongoosePlugins
Để có thể sử dụng Mongoose (MongoDB) hiệu quả, chúng ta sẽ cùng nhau cài đặt các
plugin hỗ trợ việc Query/Filter kết quả, thực hiện “soft-delete”, tự động tạo “timestamp” và
đặc biệt, khắc phục lỗi CORS với Nest.JS
Trang 80Linksourcecodegithub:https://github.com/harypham/react-for-nest
Sourcecodefinal(cảkhóahọc)sẽlànhánhmaster
Lưuý:checkoutcodetheotừngmodulesđểthựchànhsongsongvớibackend
Trang 85about:blank 85/190
Chapter11:ModulesCompany
Bài tập thực hành: tạo module “Company” Ngoài việc thực hiện CRUD, chúng ta sẽ tìm
hiểu cách phân trang (paginate data), sử dụng Interceptor để xử lý data trước khi trả về
client, customize message response cũng như “đánh version” cho API
Trang 87return{
access_token:this.jwtService.sign(payload),_id,
name,email,role};
}
86
Trang 97about:blank 97/190
Trang 99about:blank 99/190
Trang 101about:blank 101/190
Trang 103about:blank 103/190
Trang 105about:blank 105/190
Trang 107about:blank 107/190
Trang 109about:blank 109/190
Trang 111about:blank 111/190
Trang 113about:blank 113/190
Trang 115about:blank 115/190
Trang 117about:blank 117/190
Trang 119about:blank 119/190
Trang 121about:blank 121/190
Trang 123about:blank 123/190
Trang 125about:blank 125/190
Trang 127about:blank 127/190
Trang 129about:blank 129/190
Trang 131about:blank 131/190
Trang 133about:blank 133/190
Trang 135about:blank 135/190
Trang 137about:blank 137/190
Trang 139about:blank 139/190
Trang 141about:blank 141/190
Trang 143about:blank 143/190
Trang 145about:blank 145/190
Trang 147about:blank 147/190
Trang 149about:blank 149/190
Trang 151about:blank 151/190
Trang 153about:blank 153/190
Trang 155about:blank 155/190
Trang 157about:blank 157/190
Trang 159about:blank 159/190
Trang 161about:blank 161/190
Trang 163about:blank 163/190
Trang 165about:blank 165/190
Trang 167about:blank 167/190
Trang 169about:blank 169/190
Trang 171about:blank 171/190
Trang 173about:blank 173/190
Trang 175about:blank 175/190
Trang 177about:blank 177/190
Trang 178Tàiliệu:https://docs.nestjs.com/security/rate-limiting
npmi save@nestjs/throttler@4.1.0
Trang 179in 'header': ,},
Trang 182}
3.Devops
prometheusvsgrafana
Trang 184//getimageextensionletextName=path.extname(file.originalname);
//getimage'sname(withoutextension)letbaseName=path.basename(file.originalname,extName);
letfinalName=`${baseName}-${Date.now()}${extName}`
cb(null,finalName)},
},
limits:{
fileSize:1024*1024*1//1MB}
};
}