Bên cạnh đó, các tập đoàn lớn như Google, Facebook ra mắt những framework hỗ trợ lập trình viên xây dựng các ứng dụng web như NodeJS, Express với nhiều phiên bản khác nhau Cùng với xu th
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
BÁO CÁO THỰC TẬP
Xây dựng server với NodeJS - ExpressJS
Trang 2LỜI MỞ ĐẦU
Hàng triệu doanh nghiệp sử dụng Internet như một kênh truyền thông giúp tiết kiệm chi phí Nó cho phép doanh nghiệp trao đổi thông tin với thị trường mục tiêu của mình và thực hiện các giao dịch một cách nhanh chóng, an toàn Tuy nhiên, các hoạt động này chỉ trở nên hiệu quả khi doanh nghiệp có thể nắm bắt và lưu trữ tất cả các dữ liệu cần thiết và có phương tiện xử lý toàn bộ các thông tin này, sau đó tiến hành trình bày kết quả cho người dùng Từ đó xuất hiện Web app là những ứng dụng chạy trên web Thông qua web app, người dùng có thể thực hiện
một số công việc: tính toán, chia sẻ hình ảnh, mua sắm … Tính tương tác của web app cao hơn website rất nhiều Bên cạnh đó, các tập đoàn lớn như Google, Facebook ra mắt những
framework hỗ trợ lập trình viên xây dựng các ứng dụng web như NodeJS, Express với nhiều phiên bản khác nhau
Cùng với xu thế đó, Công ty Cổ phần Codosa Holing , cụ thể hơn là mảng Codosa Tech chọn tập trung nghiên cứu và xây dựng các ứng dụng theo mã nguồn mở Và thực tập sinh được trực tiếp tham gia vào quá trình dưới sự hướng dẫn, định hướng của công ty
Sau ba năm học tập trên trường, với mong muốn có thêm kinh nghiệm thực tế, cũng như được tham gia phát triển ứng dụng di động trong một môi trường chuyên nghiệp, nên em đã quyết định chọn Codosa nơi giúp em thực hiện những dự định này
Trang 3LỜI CẢM ƠN
Em xin gửi lời cảm ơn đến Trường đại học Công Nghệ Thông Tin, quý thầy cô trong trường đã tận tình chỉ dạy để bổ sung kiến thức cho em suốt thời gian theo học tại trường
Và em xin gửi lời cảm ơn đến anh Nguyễn Vĩnh Khiêm, anh Nguyễn Quốc Khánh đã tạo điều kiện cho em có cơ hội được thực tập tại công ty, cùng tất cả các anh đã giúp đỡ, chỉ bảo trong quá trình thực tập
Quá trình thực tập tại công ty đã giúp em học hỏi được rất nhiều, từ tác phong, thái độ làm việc đến các vấn đề kỹ thuật, từng bước hoàn thiện sản phẩm… Xin cảm ơn tất cả mọi người đã động viên, giúp đỡ và chia sẻ những kinh nghiệm quý báu, giúp em có những trải nghiệm tuyệt vời trong thời gian tại công ty
Trương Viết Huy Phong
TP Hồ Chí Minh, ngày 14 tháng 01 năm 2021
Trang 4NHẬN XÉT CỦA KHOA
Trang 5
MỤC LỤC
LỜI MỞ ĐẦU 1
LỜI CẢM ƠN 2
Chương 1: Giới thiêu công ty thực tập 5
1 Giới thiệu công ty Gameloft 5
2 Sản phẩm của công ty 5
Chương 2: Nội dung thực tập 6
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty 6
2 Nghiên cứu kỹ thuật 6
3 Thực hiện project 9
4 Lịch làm việc 9
Chương 3: Chi tiết về project 12
1 Giới thiệu về PawnVn 12
2 Thực hiện 17
TÀI LIỆU THAM KHẢO 18
TỔNG KẾT 19
Trang 6Chương 1: Giới thiêu công ty thực tập
1 Giới thiệu công ty Gameloft
Tên công ty: Codosa Holding Địa chỉ: 74/43/8 Đường số 20, Khu phố 1, Phường Long Thạnh Mỹ, Quận 9, TP
Hồ Chí Minh
Email: codosaholding@gmail.com Điện thoại: 0931 78 00 31 - 0936 04 72 39
SUMVIET là một công ty startup trực thuộc công ty CODOSA HOLDING được thành lâp từ năm 2017, là một công ty phát triển các sản phẩm công nghệ: Blockchain, Smart Contract, sàn thương mại điện tử, ví điện tử, … trên các nền tảng Web, Android, IOS
2 Sản phẩm của công ty
Codosa Tech hiện tại đã và đang cung cấp các sản phẩm công nghệ từ website (Thương mại điện tử, Fintech, … ), ứng dụng di động (Ví điện tử, … ) đến game, sàn trade dựa trên các nền tảng như Binary Option, MT4 & MT6 Platform, trade Forex, Crypto, …
Trang 7Chương 2: Nội dung thực tập
Trong kỳ thực tập này, em phối hợp cùng 3 bạn khác ( 2 bạn front-end, và một bạn backend) phát triển giai đoạn 1 cho dự án ứng dụng Pawnvn - hỗ trợ khách hang có nhu cầu mua bán và trao đổi sản phẩm, hoặc qua trung gian thực hiện việc cầm cố tài sản Nhóm bắt đầu
dự án với các bản giới thiệu và mô tả sản phẩm từ phía công ty, cùng với sự chỉ dẫn giúp đỡ của các anh chị hướng dẫn, đến thời điểm em viết báo cáo này, nhóm đã hoàn thành cơ bản module chức năng giai đoạn 1( Chi tiết dự án sẽ được mô tả ở phần sau và giới hạn theo quy định của công ty)
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
2 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)
Trang 8Nộ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
2.3. Tìm hiểu RESTful API và Framework ExpressJS
Thờ gian: 6 ngày (2 tuần)
Nội dung: Các kiến thức cơ bản về RESTfulAPI và ExpressJS
- 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 React Native
Expressjs 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 Expressjs 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
Trang 9- 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, ExpressJS
- 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
- Đị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
Trang 10Sau 1 tháng được training, thực hành và tự nghiên cứu tìm hiểu thêm về Typescript và ExpressJS thực tập sinh được trang bị kiến thức cơ bản về lập trình server, sử dụng các công cụ hỗ trợ debug, các quy tắc code dễ đọc, dễ hiểu và bảo trì, cách tổ chức cấu trúc cây thư mục, tận dụng và tái sử dụng code Thực tập sinh được sắp xếp tham gia vào 01 team để xây dựng một ứng dụng của công ty đang bắt đầu phát triển áp dụng những kiến thức đã học để thực hiện
Chi tiết đồ án sẽ được nói ở phần sau
4. 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
Anh Nguyễn Vĩnh
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, ExpressJS
Anh Nguyễn Quốc Khánh
Anh Nguyễn Công Minh
100%
3
- Tìm hiểu về MongoDB, sử dụng thư viện mongoose
để làm việc với mongoDB
Anh Nguyễn Quốc Khánh
Anh Nguyễn Công Minh
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
Anh Nguyễn Quốc Khánh
100%
Trang 11PawnVN chuẩn bị triển khai
5
Tiến hành dự án PawnVn, giai đoạn 1
- Thực hiện các chức năng đăng nhập, đăng kí, xác thực thông qua sms
- Xây dựng model tổng quan về authencation
Anh Nguyễn Vĩnh
6 & 7
- Thực hiện chức năng phân quyền cho admin
- Xây dựng service xác thực người dùng theo cơ chế token
Anh Nguyễn Vĩnh Khiêm
100%
8
- 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
Anh Nguyễn Vĩnh
9 & 10
- Tìm hiểu ci/cd, docker giúp triển khai ứng dụng liên tục
- Tìm hiểu PM2, Nginx và config ecosystem file của pm2
Anh Nguyễn Quốc Khánh
Anh Nguyễn Công Minh
100%
11 trở đi - Phân tích chức năng
của hệ thống theo nhu cầu của anh
Khiêm
- Xây dựng các model của ứng dụng
- Xây dựng các API
Anh Nguyễn Vĩnh Khiêm
100%
Trang 12- Viết document và Swageer
- Viết Unit test cho hệ thống
- Phân công công việc cho các thành viên trong nhóm
- Tham gia các hoạt động nghiên cứu, cuộc thi tại công ty
Trang 13Chươ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ề PawnVn
1.1 Giới thiệu
PawnVn là ứng dụng thương mại điện tử theo hình thức P2P 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:
o Mongoose: Mongoose là một framework JavaScript thường được sử dụng trong ứng dụng Node.js với database là MongoDB
o Bcrypt: BCrypt là một thuật toán mã hóa mật khẩu được thiết kế bởi Niels Provos and David Mazières
BCrypt được đánh giá là bảo mật và an toàn hơn so với MD5 và SHA bởi mỗi lần thực hiện băm nó lại cho một giá trị khác nhau, việc này khiến cho việc dò tìm mật khẩu trở nên khó hơn
o 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
Trang 14và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
o 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
o Axios: Axios là một HTTP Client được viết dựa trên Promise, được dùng cho việc hỗ trợ xây dựng các ứng dụng API, nó có thể sử dụng trong React, Vue, Angular…
o Cors: CORS là một cơ chế cho phép nhiều tài nguyên khác nhau (fonts, Javascript, v.v…) của một trang web có thể được truy vấn từ domain khác với domain của trang đó CORS là viết tắt của từ Cross-origin resource sharing
o Helmet: Helmet là một package được viêt để giúp bạn bảo vệ ứng dụng của mình khỏi những lỗ hổng đã biết bằng cách thiết lập các Http headers một cách phù hợp Thực tế thì Helmet chỉ là một tập hợp các Middleware nhỏ làm nhiệm vụ thiết lập các Http headers liên quan đến bảo mật
o 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
o 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
1.3 Một số giao diện:
Một sô màn hình giao diện hệ thống và màn hình giao diện swagger
Trang 15Màn hình swagger thể hiện các thông tin api của ứng dụng.
Màn hình terminal deploy ứng dụng thông qua pm2
Màn hình log các thông tin khi ứng dụng chạy
Trang 16Màn hình đăng nhập
Trang 17Màn hình đăng kí
Màn hình xác thực OTP
Trang 18Màn hình phân quyền
2 Thực hiện
4 thành viên của team fresher PawnVN:
- Trương Viết Huy Phong
- Chung Nguyễn Trường Duy
- Võ Phi Nhật Duy
- Trần Quốc An
Và sự giúp đỡ tận tình của team trainer Codosa Holding
Trang 19TÀ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 7 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