TTDN 19522218 Trần Quốc Thắng SE501 N11 PMCL docx ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM THỰC TẬP TỐT NGHIỆP ĐỀ TÀI Xây dựng Server với Nodejs NestJ[.]
Trang 1ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
THỰC TẬP TỐT NGHIỆP
ĐỀ TÀI:
Xây dựng Server với Nodejs - NestJs
Lớp:SE501.N11.PMCL
Sinh viên thực hiện: Trần Quốc Thắng – 19522218
TP Hồ Chí Minh, ngày 15 tháng 11 năm 2022
Trang 2NHẬN XÉT
(Của giảng viên)
Trang 3
MỤC LỤC
2.1 Hướng dẫn những quy tắc cơ bản khi làm việc nhóm và những quy định của công ty 7 2.1.1 Tìm hiểu về Nestjs và những framework liên quan 7
1.3.1 Một sô màn hình giao diện hệ thống và màn hình giao diện swagger 11 1.3.2 Màn hình terminal deploy ứng dụng thông qua pm2 13
Trang 4LỜI NÓI ĐẦU
Ngày nay, ngành công nghiệp phát triển ứng dụng web là một bộ phận không thể thiếu của ngành công nghiệp phần mềm Với tốc độ phát triển vô cùng mạnh mẽ, ngành phát triển ứng dụng web đã và đang là nhân tố kích thích sự phát triển của công nghệ thông tin thế giới, cả về phần cứng và phần mềm
Cùng với xu thế phát triển của thế giới, Việt Nam cũng không phải ngoại lệ Ngành công nghiệp phát triển web non trẻ Việt Nam đã và đang phát triển mạnh mẽ, để hòa nhập với những công ty hàng đầu về xây dựng nền tảng web trên thế giới Bên cạnh
sự phát triển của web thì những ngành nghề được tiếp cận người dùng một cách nhanh chóng như những gì ta có thể thấy là mạng xã hội hay những website bán hàng trực tuyến cũng đang rất thịnh hành trên cả thế giới lẫn Việt Nam
Sau ba năm học tập trên trường, do mong muốn có thêm kinh nghiệm thực tế, cũng như muốn được tìm hiểu, bổ sung kiến thức trong một môi trường chuyên nghiệp,
em có dự định là sẽ thực tập trong học kì Vì vậy, em quyết định chọn Công Ty TNHH Playground - một môi trường lý tưởng, hiện đại, chuyên nghiệp - là nơi sẽ giúp em thực hiện được dự định này
Trang 5LỜI CẢM ƠN
Em xin chân thành cảm ơn ban giám hiệu và quý thầy cô trường Đại học Công nghệ thông tin đã cung cấp và bồi dưỡng cho em những kiến thức cơ bản trong suốt 4 năm ngồi trên giảng đường đại học, để từ đó em có nền tảng áp dụng vào đợt thực tập một cách hiệu quả nhất có thể
Em xin gửi lời cảm ơn quý Công Ty TNHH Playground đã tạo điều kiện cho em thực tập tại công ty cũng như cung cấp, bổ sung cho em những kiến thức mà em còn thiếu sót Quý công ty đã hỗ trợ em rất nhiều trong suốt thời gian thực tập vừa qua, dạy em những kỹ năng cần thiết, truyền đạt cho em những kinh nghiệm mà các anh chị đã trải qua trong quá trình làm việc, trao đổi với khách hàng, tác phong và tinh thần trách nhiệm trước công việc được giao, những suy nghĩ tích cực Các anh chị cũng đã tạo cho em nhiều điều kiện để ứng dụng những kiến thức đã học vào thực tế để xây dựng những dự
án thực tiễn đi từ lúc ban đầu, nâng cao trình độ, cũng như tốc độ lập trình và trí thức thêm một bậc Em xin chân thành cảm ơn
Vì kiến thức bản thân còn hạn chế cũng như là lần đầu tiên được va chạm và tiếp xúc với thực tế, áp dụng lý thuyết vào công việc nên bản thân còn bỡ ngỡ và lúng túng, không tránh khỏi những thiếu sót, mong quý Thầy (Cô) có thể đóng góp ý kiến để em có thể hoàn thiện hơn
Em xin chân thành cảm ơn!
Trần Quốc Thắng
TP Hồ Chí Minh, ngày 25 tháng 12 năm 2022
Trang 6Chương 1: Giới thiệu công ty thực tập
1 Giới thiệu công ty Playground
Tên công ty: TNHH Playground
Địa chỉ: Mai Chi Tho Street, District 2, Ho Chi Minh City
Email:contact@playgroundvina.com
2 Sản phẩm của công ty
Playground hiện tại đã và đang cung cấp các sản phẩm dịch vụ liên quan đến lĩnh vực blockchain, NFT Đặc biệt phải kể đến các sản phẩm công nghệ như Game, Sàn Swap, DAO, Marketplace, …
Trang 7Chương 2: Nội dung thực tập
Đợt thực tập ứng dụng mô hình làm việc Scrum và sinh viên thực tập được đào tạo
cơ bản về lập trình web sử dụng Nodejs và React, đồng thời rèn luyện những kỹ năng mềm như làm việc nhóm theo Scrum, thuyết trình, giao tiếp, sử dụng công cụ quản lý công việc như Trello Tại công ty, sinh viên có cơ hội được học tập, khám phá và làm việc trong một môi trường startup năng động
Ở Playground thực tập sinh có cơ hội được học hỏi công nghệ blockchain được áp dụng và các product của công ty như thế nào Từ đó, thực tập sinh hiểu và biết ứng dụng blockchain phù hợp với mục đích
Ngoài việc học về công nghệ sinh viên còn được hướng dẫn những kỹ năng mềm
về làm việc teamwork, cách sử dụng git và mô hình hoá dữ liệu
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty
Thời gian : 1 ngày
Nội dung : Giới thiệu về công ty, cách tổ chức của công ty
Được nghe người phụ trách giới thiệu về công ty, quá trình thành lập và phát triên (như đã nhắc đến ở trên), quy trình làm việc từ cao xuống thấp, cách thức tổ chức của công ty
Ngoài ra, thực tập sinh còn được giới thiệu về cách thức làm việc trong công ty như thời gian đi làm, các quy định cần phải tuân thủ, cách sử dụng email trong công việc…
Kết quả : Hiểu thêm về công ty, quá trình thành lập và phát triển Có thêm các kỹ
năng về việc sử dụng email trong công việc, làm việc có kế hoạch, có kỷ luật, có trách nhiệm hơn
Trang 82 Nghiên cứu kỹ thuật
2.1 Các công cụ làm việc
Thời gian : 4 ngày
Nội dung : Tìm hiểu về các công cụ sẽ được sử dụng trong quá trình làm việc.
Trong thời gian này, supervisor đã hướng dẫn thực tập sinh tìm hiểu về các công cụ sẽ giúp ích cho trong công việc sau này Một số phần mềm trong số đó như Gitlab - sử dụng trong làm việc nhóm, VScode - một editor để xây dựng ứng dụng
Thực hiện : Thực hành sử dụng các phần mềm đã nêu trên.
Kết quả : Lập trình sử dụng các công cụ miễn phí, giúp dễ dàng kết hợp các
công cụ với nhau, so với việc dung các IDE
2.2 Tìm hiểu ngôn ngữ Typescript
Thời gian : 3 ngày (1 tuần)
Nội dung : Ôn tập về các kiến thức javascript căn bản, javascript ES6 ( arrow
functions, async, await, promise, … ) và training về các kỹ thuật của typescript, sự khác nhau của typescript và javascript, sử dụng typescript với framework Express để xây dựng và phát triển server
Thực hiện :
- Tham gia đầy đủ các buổi training của công ty
- Làm các bài thực hành, kiểm tra về kiến thức đã học
Kết quả :
- Nâng cao kỹ năng lập trình với ngôn ngữ typescript
- Có được những kiến thức quan trọng cho việc lập trình server sau này
- Ngoài ra còn được biết thêm một số quy tắc trong việc viết code sao cho đúng chuẩn, dễ đọc, dễ hiểu
Trang 92.3 Tìm hiểu RESTful API và Framework NestJS
Thờ gian: 6 ngày (2 tuần)
Nội dung: Các kiến thức cơ bản về RESTfulAPI và NestJS
- Cơ bản về RESTful API
RESTful API là một tiêu chuẩn dùng trong việc thiết kế API cho các ứng dụng web (thiết kế Web services) để tiện cho việc quản lý các resource
Nó chú trọng vào tài nguyên hệ thống (tệp văn bản, ảnh, âm thanh, video, hoặc dữ liệu động…), bao gồm các trạng thái tài nguyên được định dạng và được truyền tải qua HTTP
- Framework NestJS
NestJS là một framework được xây dựng trên nền tảng của Nodejs
Nó cung cấp các tính năng mạnh mẽ để phát triển web hoặc mobile NestJs hỗ trợ các method HTTP và midleware tạo ra API vô cùng mạnh mẽ
và dễ sử dụng.…
Thực hiện :
- Tham gia đầy đủ các buổi trainning
- Tự đọc thêm tài liệu, nghiên cứu thêm về các library, luyện tập thêm về cách cài đặt, sử dụng các library
Kết quả :
- Làm quen, hiểu được kiến trúc cơ bản của các thành phần trong NodeJS, NestJS
- Thành thạo việc cài đặt, config và sử dụng các thư viện cần dùng cho project
2.4 Tìm hiểu MongoDB
Nội dung : Các kỹ thuật cơ bản trong mongodb
Trang 10- Định nghĩa về MongoDB:
MongoDB là một cơ sở dữ liệu mã nguồn mở và là cơ sở dữ liệu NoSQL(*) hàng đầu, được hàng triệu người sử dụng MongoDB được viết bằng C++ Ngoài ra, MongoDB là một cơ sở dữ liệu đa nền tảng, hoạt động trên các khái niệm Collection và Document, nó cung cấp hiệu suất cao, tính khả dụng cao và khả năng mở rộng dễ dàng
- Sử dụng thư viện mongoose hỗ trợ thao tác với mongodb
Mongoose là một thư viện JavaScript cho phép bạn định nghĩa các schema với dữ liệu được định kiểu rõ ràng Khi một schema được định nghĩa, Mongoose cho phép bạn tạo một Model dựa trên một schema cụ thể Model của Mongoose sau đó được ánh xạ tới một MongoDB document thông qua định nghĩa schema của Model
Thực hiện :
- Tham gia đầy đủ các buổi training
- Xây dựng model và các api thực thi transaction trên các model
Kết quả:
- Đã có thể xây dựng model của hệ thống, thực thi các transaction trên các model thông qua API
3 Thực hiện project
Sau thời gian 3 tuần tiếp cận với javascript dưới sự chỉ dạy tận tình thông quan các buổi seminar và được tiếp cận với những dự án thực tế Các anh đã giúp em nhận ra hướng phát triển và môi trường thích hợp với bản thân là server-side
Trong thời gian 3 tuần tiếp theo em đã có thể đóng góp kiến thức của mình để giúp các anh tiếp tục hoàn thành dự án PoolsMall với vị trí back-end
Trang 114 Lịch làm việc
Mức độ hoàn thành
Nhận xét của người hướng dẫn
1
- Tìm hiểu về công ty, cách tổ chức của công ty
- Làm quen với các công cụ làm việc trong công ty
- Học cách trao đổi, làm việc qua email
2
- Học tập ôn lại các kiến thức cũ, nắm chắc những gì cơ bản đã học
- Tìm hiểu, ôn tập về Typescript, NodeJS, NestJS
3 - Tìm hiểu về MongoDB, sử dụng thư việnmongoose để làm việc với mongoDB. Anh Tân 100%
4
- Cấu trúc source code
- Tìm hiểu, nắm bắt thông tin dự án
- Tìm hiểu các quy trình của ứng dụng PoolsMall chuẩn bị triển khai
5
- Thực hiện các chức năng đăng nhập, đăng
kí, xác thực thông qua email
- Xây dựng model tổng quan về authencation
6 - Xây dựng service xác thực người dùng theocơ chế token Anh Tân 100%
7
- Xây dựng các chức năng xác thực KYC của người dùng
- Các api liên quan đến thông tin của người dùng
8
- Set up server AWS EC2
- Tìm hiểu PM2, Nginx và config ecosystem file của pm2
9 trở đi
- Phân tích chức năng của hệ thống theo nhu cầu của anh Nguyễn Vĩnh Khiêm
- Xây dựng các model của ứng dụng
- Xây dựng các API
- Viết document và Swageer
Trang 12Chương 3: Chi tiết về project
Theo quy chế đối với thực tập sinh, trích dẫn:
Điều 5: Bảo mật thông tin
- Phần a.Thông tin của khách hàng: … Bảo mật thông tin khách hàng ( họ tên, địa chỉ, điện thoại, sản phẩm, doanh thu, dữ liệu, …)
- Phần b.Thông tin của công ty: … Đảm bảo an toàn thông tin về sản phẩm, dự án đang trong giai đoạn kế hoạch, phát triển sản phẩm hoặc chưa được phép công bố Nên phần này sẽ mô tả giới hạn về quá trình thực tập
1 Giới thiệu về PoolsMall
1.1 Giới thiệu
PoolsMall là ứng dụng thương mại điện tử theo hình thức B2C kết hợp với mall từ đối tác hoặc sở hữu của công ty Ứng dụng cho phép người dùng giao dịch trực tiếp thông qua ứng dụng dưới sự kiểm duyệt sản phẩm từ cửa hàng và các chuyên gia kiểm định nhằm đem lại sản phẩm đúng và an toàn với người mua và người bán
1.2 Chi tiết ứng dụng
Ứng dụng được xây dựng bằng ReactJs, server sử dụng NodeJS với mục đích tiết kiệm chi phí khi phát triển ứng dụng
Các công nghệ sử dụng trong dự án:
- Mongoose: Mongoose là một framework JavaScript thường được sử dụng trong ứng dụng Node.js với database là MongoDB
- Jsonwebtoken: JSON Web Token (JWT) là 1 tiêu chuẩn mở (RFC 7519) định nghĩa cách thức truyền tin an toàn giữa các thành viên bằng 1 đối tượng JSON Thông tin này có thể được xác thực và đánh dấu tin cậy nhờ vào “chữ ký” của nó Phần chữ ký của JWT sẽ được
mã hóa lại bằng HMAC hoặc RSA
Trang 13- Web3: thư viện cung cấp những hàm để tương tác với blockchain
- Nodemailer là một mô-đun dành cho các ứng dụng Node.js để cho phép gửi email dễ dàng như bánh ngọt Dự án đã bắt đầu trở lại vào năm 2010 khi không có tùy chọn lành mạnh nào để gửi email, ngày nay nó là giải pháp mà hầu hết người dùng Node.js chuyển sang theo mặc định
- Swagger-ui-express: Swagger UI là một tool cho phép bất kỳ ai - từ developers cho đến end users - có thể hình dung và tương tác với các tài nguyên API của dự án Tool này sẽ tự động generates ra API documents từ file config Swagger, với cái nhìn trực quan và việc triển khai trở nên dễ dàng hơn cho phía client
- PM2: pm2 là một trình quản lý các process (tiến trình) dành cho các ứng dụng Nodejs Nó được viết bằng chính Nodejs và Shell PM2 cũng được tích hợp bộ cân bằng tải (load balancer) Bạn có thể giữ cho các process của server còn sống và reload/restart với zero downtime
- Nginx: là một phần mềm web server mã nguồn mở nỗi tiếng Ban đầu nó dùng để phục vụ web HTTP Tuy nhiên, ngày nay nó cũng được dùng làm reverse proxy, HTTP load balancer và email proxy như IMAP, POP3, và SMTP
Trang 141.3 Một số giao diện
1.3.1 Một sô màn hình giao diện hệ thống và màn hình giao diện swagger
Trang 161.3.2 Màn hình terminal deploy ứng dụng thông qua pm2
Màn hình login vào server
Màn hình log các thông tin khi ứng dụng chạy
Trang 171.3.3 Màn hình Order Product
Màn hình order product
Trang 18Màn hình thanh toán order
1.3.4 Màn hình giao hàng
Màn hình giao hàng
Trang 192 Thực hiện
4 thành viên của team fresher Playground:
- Trần Quốc Thắng
- Hoàng Quốc Vương
- Hoàng Ngọc Hiếu
- Nguyễn Văn Vũ
Và sự giúp đỡ tận tình của team trainer Playground
TÀI LIỆU THAM KHẢO
Mongodb
https://mongodb.com
Packages
https://npmjs.com
Typescript
https://www.typescriptlang.org/
https://topdev.vn/blog/hoc-typescript-trong-30-phut/
https://viblo.asia/p/tim-hieu-typescript-va-kien-thuc-co-ban-PmeRQpnyGoB
pm2
https://pm2.keymetrics.io/
nginx
https://www.nginx.com/
Trang 20TỔNG KẾT
Sau 8 tháng thực tập tại công ty, em đã học được rất nhiều đều, không chỉ kiến thức riêng về lập trình mà còn về quy chuẩn làm việc tại công ty, để biết được rằng hiện tại những doanh nghiệp đang làm việc như thế nào, phối hợp nhân lực ra sao
Hơn nữa, em còn được tiếp thu những kinh nghiệp quý báu từ các anh chị và đồng nghiệp, góp phần giúp em hoàn thiện kiến thức, kỹ năng của mình và đạt được một số thành công nhất định trong quá trình thực tập tại công ty
Về tư tưởng của bản thân, em biết được làm sao để trở thành một lập trình viên, các những lập trình viên khác giải quyết vấn đề, về nghề nghiệp sẽ làm trong tương lai, định hướng nghề nghiệp