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

แชร์
ฝัง
  • เผยแพร่เมื่อ 13 ต.ค. 2024
  • 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.co...
    Facebook: / nguyen.duc.hoang.bk

ความคิดเห็น • 51

  • @VinhNguyen-mb7hs
    @VinhNguyen-mb7hs 6 หลายเดือนก่อน

    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 😀

  • @Zero_Kid
    @Zero_Kid 7 หลายเดือนก่อน

    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

  • @havuthanh386
    @havuthanh386 ปีที่แล้ว +5

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

  •  ปีที่แล้ว +1

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

  • @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 ạ

  • @phanthanhtao9492
    @phanthanhtao9492 ปีที่แล้ว +1

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

  • @thinganbui5983
    @thinganbui5983 2 หลายเดือนก่อน

    cảm ơn video của anh ạ

  • @quanghuy37934
    @quanghuy37934 ปีที่แล้ว +1

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

  • @trandinhthangdev
    @trandinhthangdev ปีที่แล้ว

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

  • @taihaycode
    @taihaycode 11 หลายเดือนก่อน

    Thank you a, Video rất hay

  • @Spkntei
    @Spkntei ปีที่แล้ว

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

  • @CuongPham-ql6ny
    @CuongPham-ql6ny ปีที่แล้ว +1

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

  • @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

  • @tieuduong5238
    @tieuduong5238 ปีที่แล้ว +1

    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  ปีที่แล้ว +6

      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

  •  ปีที่แล้ว +1

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

  • @monokien1140
    @monokien1140 ปีที่แล้ว +1

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

    • @NguyenDucHoang
      @NguyenDucHoang  ปีที่แล้ว +1

      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

  • @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.

  • @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 ปีที่แล้ว +2

      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

  • @fuhovu2225
    @fuhovu2225 ปีที่แล้ว +1

    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é

  • @Zombies2020
    @Zombies2020 ปีที่แล้ว

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

  • @hieutran-pv2xu
    @hieutran-pv2xu ปีที่แล้ว +1

    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

  • @website_code
    @website_code ปีที่แล้ว

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

  • @beloaded3736
    @beloaded3736 ปีที่แล้ว

    Mr Nguyen thank You for your effort :)

  • @uuu6882
    @uuu6882 ปีที่แล้ว

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

    • @NguyenDucHoang
      @NguyenDucHoang  ปีที่แล้ว +4

      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 6 หลายเดือนก่อน

      @@NguyenDucHoang thưa thầy

  • @usol123
    @usol123 ปีที่แล้ว +2

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

    • @NguyenDucHoang
      @NguyenDucHoang  ปีที่แล้ว +1

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

  • @ngoviet169
    @ngoviet169 11 หลายเดือนก่อน

    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  11 หลายเดือนก่อน

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

  • @thongnguyen7354
    @thongnguyen7354 ปีที่แล้ว

    Làm luôn Grapql ko a

  • @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

  • @fuhovu2225
    @fuhovu2225 ปีที่แล้ว

    sao k thayas repo github thay oi

    • @NguyenDucHoang
      @NguyenDucHoang  ปีที่แล้ว

      Day ban nhe:
      github.com/sunlight3d/TH-camChannel/tree/master/NestJSRestAPI