Xây dựng Restful Backend api với NestJS, JWT Authenticaion, Prisma,Pactum

Ғылым және технология

2:45 - Cài đặt NodeJS
3:53 - Tạo dự án mới với Nest CLI
6:12 - Thêm các module, controller, service cho dự án NestJS
13:35 - Viết các API dạng Post method cho phép đăng ký, đăng nhập người dùng
17:58 - Tạo file Docker compose để khởi tạo container chứa Postgres SQL
23:48 - Cài đặt thư viện Prisma ở chế độ Development(-D), khởi tạo Schema trống
25:55 - Định nghĩa các thực thể trong cơ sở dữ liệu Postgres và thực hiện migration
31:10 - Tạo PrismaService để thao tác với cơ sở dữ liệu từ NestJS
38:58 - Định nghĩa các DTO(Data Transfer Object gửi dữ liệu từ client lên NestJS backend)
43:17 - Validate thông tin đầu vào với class-validator và class-transformer
53:40 - Thêm quan hệ one-to-many vào Database Schema và migrations lại những thay đổi
1:10:31 - Viết lại các script trong package.json giúp quá trình chạy app thuận tiện hơn
1:16:37 - Giới thiệu về JSON Web Token(JWT)
1:18:51 - Cài đặt các thư viện phục vụ đăng nhập và lấy ra JWT
1:36:32 - Viết JWT Guards để kiểm tra token đối với request có yêu cầu đăng nhập
1:47:44 - Tùy biến Decorator để lấy thông tin user cho tuwfng request
1:51:29 - Giới thiệu về PactumJS và viết các End-to-End test
1:58:29 - Xây dựng môi trường test tự động, các hàm beforeAll, afterAll
2:01:04 - Tùy biến lại Docker compose, thêm các script phục vụ Automation test
2:03:04 - Quản lý các biến môi trường với dotenv
2:14:23 - Viết các test case cho chức năng Authentication(đăng nhập, đăng ký người dùng)
2:24:38 - Viết test case cho chức năng lấy thông chi tiết người dùng
2:28:08 - Viết các test case CRUD cho thực thể Note
2:28:58 - Thêm module, controller, services và các chức năng CRUD cho Note
2:50:00 - Test các chức năng cho Note trên Postman
2:57:30 - Quay lại viết nốt các test case cho Note
Code:
docs.google.com/document/d/10...
Facebook: / nguyen.duc.hoang.bk

Пікірлер: 50

  • @VinhNguyen-mb7hs
    @VinhNguyen-mb7hs3 ай бұрын

    Lâu lắm rồi mới coi lại bài giảng của anh. Vẫn style ấy, vẫn rất dễ hiểu, và dễ nắm bắt ạ, em cảm ơn anh. Coi anh từ lúc video dạy về react native hồi bắt đầu đợt dịch 😀

  • @trandinhthangdev
    @trandinhthangdev10 ай бұрын

    cảm ơn anh nhiều ạ, em đã học được rất nhiều ạ

  • @chiendd1908
    @chiendd1908 Жыл бұрын

    Video hay quá. Bây giờ em mới biết đến kênh anh. Chúc a và gia đình thật nhiều sức khỏe, chức kênh ngày càng lớn mạnh. Mong anh ra thêm về các chủ đề liên quan đến nestjs ạ

  • 11 ай бұрын

    cảm ơn anh nhiều, em học được rất nhiều thứ từ anh.

  • @quanghuy37934
    @quanghuy37934 Жыл бұрын

    Cám ơn anh nhé video rất hay

  • @havuthanh386
    @havuthanh386 Жыл бұрын

    Thank anh. Mong anh tiếp tục ra seri nest js nữa ạ 🤩

  • @NguyenDucHoang

    @NguyenDucHoang

    Жыл бұрын

    thank you :)

  • @phanthanhtao9492
    @phanthanhtao9492 Жыл бұрын

    Thanks anh, đã làm nestjs, tiếp tục ra seri nest anh nhé, vote anh ❤❤❤

  • @NguyenDucHoang

    @NguyenDucHoang

    Жыл бұрын

    Thank you

  • @Zero_Kid
    @Zero_Kid3 ай бұрын

    Rất cảm ơn a, giá như video này a làm thêm @Roles nữa hết nước chấm

  • @taihaycode
    @taihaycode8 ай бұрын

    Thank you a, Video rất hay

  • @NguyenDucHoang

    @NguyenDucHoang

    7 ай бұрын

    Thank you

  • @CuongPham-ql6ny
    @CuongPham-ql6ny Жыл бұрын

    Anh làm thêm JavaScript nâng cao thêm nữa đi anh em cảm ơn nhiều ạ

  • @Spkntei
    @Spkntei11 ай бұрын

    Mong thầy ra thêm phần role based access control cho Serie này ạ 😂😂😂

  • @NguyenDucHoang

    @NguyenDucHoang

    10 ай бұрын

    Thank you

  • @fuhovu2225
    @fuhovu2225 Жыл бұрын

    thầy ơi, bunjs thì sao ạ, e thấy bảo hiệu năng ngon hơn node, netjs

  • @ICOReviewtoken
    @ICOReviewtoken Жыл бұрын

    add nodemon vào như thế anh ơi. Anh làm thêm đủ concept về soft, filter, navigation đi a

  • @ICOReviewtoken

    @ICOReviewtoken

    Жыл бұрын

    A không cần đâu nhưng có lúc em thấy nó ko ăn luôn phải restart server

  • @Zombies2020
    @Zombies2020 Жыл бұрын

    anh ơi anh có nhận tôi ưu url larravel ko ak

  • 11 ай бұрын

    Làm sao deploy lên server thầy 😢

  • @anhkhang922
    @anhkhang922 Жыл бұрын

    Thank anh. anh ơi em làm theo đến chỗ JWT thì đang gặp issue này ạ: TypeError: JwtStrategy requires a secret or key

  • @NguyenDucHoang

    @NguyenDucHoang

    Жыл бұрын

    Thông báo lỗi "TypeError: JwtStrategy requires a secret or key" xuất hiện khi chưa thiết lập secret hoặc key cho đối tượng JwtStrategy trong ứng dụng của bạn. Trong PassportJS, đối tượng JwtStrategy được sử dụng để xác thực và phân tích mã thông báo JSON Web Token (JWT). Khi tạo đối tượng JwtStrategy, bạn cần cung cấp một secret hoặc key để giải mã và xác minh chữ ký JWT. Vì vậy, bạn cần kiểm tra lại mã của bạn và đảm bảo rằng bạn đã cung cấp đúng secret hoặc key trong đối tượng JwtStrategy. Ví dụ: javascript Copy code const JwtStrategy = require('passport-jwt').Strategy; const ExtractJwt = require('passport-jwt').ExtractJwt; const mongoose = require('mongoose'); const User = mongoose.model('User'); const keys = require('./keys'); const opts = {}; opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken(); opts.secretOrKey = keys.secretOrKey; module.exports = passport => { passport.use(new JwtStrategy(opts, (jwt_payload, done) => { User.findById(jwt_payload.id) .then(user => { if (user) { return done(null, user); } return done(null, false); }) .catch(err => console.log(err)); })); }; Trong ví dụ này, secretOrKey được cung cấp từ module keys. Bạn cần chắc chắn rằng keys.secretOrKey đã được định nghĩa trong file keys.js và chứa giá trị secret hoặc key của bạn. Nếu keys.secretOrKey không được định nghĩa đúng, bạn sẽ gặp phải thông báo lỗi trên. Nếu bạn vẫn gặp vấn đề, bạn có thể chia sẻ thêm mã của bạn để chúng ta có thể giúp bạn tìm giải pháp.

  • @website_code
    @website_code Жыл бұрын

    mong anh hướng dẫn phần author, em làm lỗi mãi

  • @fuhovu2225
    @fuhovu2225 Жыл бұрын

    làm sao để cho 1 user chỉ có 1 token đc dùng trong 1 thời điểm ạ, ví dụ login xong thì token cũ không dùng được nữa

  • @sojun2642

    @sojun2642

    Жыл бұрын

    trường hợp này thì bạn phải lưu lại token trên server; khi có đăng nhập thì bạn tạo lại token và lưu lại trên server, khi client request lên thì so sánh hoặc verify gì đó, xem có trùng với token trên server k, nếu trùng thì cho lấy data

  • @monokien1140
    @monokien1140 Жыл бұрын

    tks anh, nestjs có làm tiếp seri không anh

  • @NguyenDucHoang

    @NguyenDucHoang

    Жыл бұрын

    Anh làm dạng video dài thôi, tổng hợp nhiều kiến thức, anh em comment xong a lại tổng hợp tiếp

  • @fuhovu2225
    @fuhovu2225 Жыл бұрын

    thầy ơi thấy giới thiệu những extention vscode để nó sổ / gợi ý code đi

  • @namhd1708

    @namhd1708

    Жыл бұрын

    tabnine bạn nhé

  • @tieuduong5238
    @tieuduong5238 Жыл бұрын

    tại sao mình phải viết các xử lý trong service mà k viết thẳng ở trong controller luôn ạ

  • @NguyenDucHoang

    @NguyenDucHoang

    Жыл бұрын

    Việc viết các xử lý trong tầng service thay vì viết trực tiếp trong controller trong kiến trúc ứng dụng Node.js có các tầng (controller, service, repository, model) có nhiều lợi ích quan trọng: Tách biệt logic xử lý: Tầng service giúp tách biệt logic xử lý nghiệp vụ (business logic) của ứng dụng. Controller chỉ nên chịu trách nhiệm điều khiển luồng dữ liệu và giao tiếp với yêu cầu từ phía người dùng, trong khi logic xử lý cụ thể nên được đặt trong service. Điều này giúp mã nguồn trở nên dễ đọc, dễ bảo trì và tái sử dụng. Tính tái sử dụng và mở rộng: Bằng cách đặt logic xử lý trong service, bạn có thể tái sử dụng các phần code đó trong các thành phần khác của ứng dụng, chẳng hạn như trong các worker, jobs, hoặc các tác vụ không phải là phản hồi trực tiếp cho yêu cầu từ người dùng. Đồng thời, việc tách biệt logic xử lý trong service cũng giúp dễ dàng mở rộng và bổ sung các chức năng mới mà không ảnh hưởng đến controller. Quản lý giao tiếp với repository: Tầng service có thể chịu trách nhiệm gọi và quản lý các thao tác truy vấn cơ sở dữ liệu thông qua tầng repository. Điều này giúp tách biệt và quản lý dễ dàng việc truy cập, truy vấn và thao tác dữ liệu, và cho phép kiểm soát truy cập vào dữ liệu từ các thành phần khác của ứng dụng. Kiểm thử và Debugging: Việc tách biệt logic xử lý trong service giúp việc kiểm thử (unit testing) và gỡ lỗi (debugging) trở nên dễ dàng hơn. Bạn có thể kiểm thử các chức năng của service một cách riêng biệt và độc lập, bằng cách mocking các phần khác như repository hay các thành phần bên ngoài khác. Điều này giúp đảm bảo tính đúng đắn và độ tin cậy của logic xử lý.

  • @tieuduong5238

    @tieuduong5238

    Жыл бұрын

    Dạ, cám ơn anh rất nhiều

  • @beloaded3736
    @beloaded3736 Жыл бұрын

    Mr Nguyen thank You for your effort :)

  • @NguyenDucHoang

    @NguyenDucHoang

    Жыл бұрын

    Thanks for watching :)

  • @phamhac8050
    @phamhac8050 Жыл бұрын

    docker compose up -d yaml: line 2: mapping values are not allowed in this context bị này bị j mn 21:00

  • @tuantrannguyenminh2705

    @tuantrannguyenminh2705

    10 ай бұрын

    ports: - 5434:5432

  • @usol123
    @usol123 Жыл бұрын

    Thiếu quản lý error message và error code, i18

  • @NguyenDucHoang

    @NguyenDucHoang

    Жыл бұрын

    Kaka, thanks bạn, nhiều nội dung quá :d

  • @fuhovu2225
    @fuhovu2225 Жыл бұрын

    sao k thayas repo github thay oi

  • @NguyenDucHoang

    @NguyenDucHoang

    Жыл бұрын

    Day ban nhe: github.com/sunlight3d/KZreadChannel/tree/master/NestJSRestAPI

  • @hieutran-pv2xu
    @hieutran-pv2xu Жыл бұрын

    anh có thể chia sẻ source code của dự án này được ko ạ, em cám ơn anh nhiều ạ

  • @NguyenDucHoang

    @NguyenDucHoang

    Жыл бұрын

    Anh để link ở phần description rồi em nhé

  • @bomcover

    @bomcover

    Жыл бұрын

    @@NguyenDucHoang Đai ca xem lai dùm với , đệ tìm không thấy

  • @uuu6882
    @uuu6882 Жыл бұрын

    Thầy còn đi làm ko ạ

  • @NguyenDucHoang

    @NguyenDucHoang

    Жыл бұрын

    Mình giờ cũng code 30%, ngoài ra dạy học và làm một số việc khác nữa, u44 rồi

  • @QuyHo-rf9zu

    @QuyHo-rf9zu

    2 ай бұрын

    @@NguyenDucHoang thưa thầy

  • @thongnguyen7354
    @thongnguyen7354 Жыл бұрын

    Làm luôn Grapql ko a

  • @NguyenDucHoang

    @NguyenDucHoang

    Жыл бұрын

    Sắp coá rồi em

  • @ngoviet169
    @ngoviet1697 ай бұрын

    cảm nhận cá nhân giống như hình ảnh được làm trước sau chỉ đọc lại vậy

  • @NguyenDucHoang

    @NguyenDucHoang

    7 ай бұрын

    yes, mình code truớc xong mới gõ và lồng tiếng :D

Келесі