Với tốc độ phát triển vô cùng mạnh mẽ, ngành pháttriể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 tinthế giới, cả về phần cứng và phần mềm.. Giới thi
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
LẬP TRÌNH BACKEND VỚI NODEJS – EXPRESSJS
Trang 2TP Hồ Chí Minh, tháng 1 năm 2021
Trang 3LỜI MỞ ĐẦ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áttriể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 tinthế 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ànhcô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ậpvớ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ểncủ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ịnhhà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ũngnhư muốn được tham gia làm game trong một môi trường chuyên nghiệp, em có dự định là
sẽ thực tập trong hè Vì vậy, em quyết định chọn Gameloft - 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 4LỜI CẢM ƠN
Trân trọng gửi lời cảm ơn Công ty TNHH Công nghệ Sum Việt đã tạo điều kiện cho
em có cơ hội được thực tập tại công ty
Chỉ trong một thời gian ngắn, nhưng nhờ sự chỉ dẫn nhiệt tình của nhóm trainer,nhóm thực tập chúng em đã tiếp thu được những kiến thức quan trọng để có thể làm đượcmột web server Chân thành cảm ơn các anh chị trong nhóm trainer đã bỏ ra nhiều thờigian,công sức để hướng dẫn chúng em hoàn thành đợt thực tập này
Đặc biệt cảm ơn anh Trần Quốc Khánh, đã training nodejs, hướng dẫn, giúp đỡ cho
chúng em tận tình cả những khó khăn trong công việc, đến những khó khăn việc làm quenvới môi trường mới
Cũng xin cảm ơn thầy cô trong khoa Công nghệ phần mềm đã nhiệt tình hỗ trợ, tạođiều kiện em làm bài báo cáo này
Chung Nguyễn Trường DuyTpHCM, ngày 1 tháng 1 năm 2021
Trang 5NHẬN XÉT CỦA KHOA
Trang 6
MỤC LỤC Chương 2: Nội dung thực tập 8 TÀI LIỆU THAM KHẢO 23
Trang 7Chương 1: Giới thiêu công ty thực tập
1 Giới thiệu công ty Sum Việt
Tiền thân là công ty phát triển truyền thông quảng cáo Codosa
với các lĩnh vực kinh doanh: lập trình ứng dụng công nghệ, truyền thông & quảng
Với tâm huyết muốn phát triển & ứng dụng công nghệ 4.0 vào phục
vụ đời sống, nâng cao chất lượng dịch vụ, lợi ích đến người tiêu dùng, đồng thờigiải quyết vấn đề kết nối thương mại cho doanh nghiệp Ban lãnh đạo công ty đãchuyển đổi & phát triển công ty Codosa Holding trở thành một công ty đầu tư &phát triển công nghệ thông minh 4.0: Big Data, AI - Trí thông minh nhân tạo,Blockchain, nhận diện khuôn mặt,
2 Sản phẩm của công ty
Sum Việt hiện tại đã và đang cung cấp các sản phẩm công nghệ từ website (Thươngmại điện tử, Fintech, … ), ứng dụng di động (Ví điện tử, … ) đến game, sàn trade dựa trêncác nền tảng như Binary Option, MT4 & MT6 Platform, trade Forex, Crypto, …
Trang 8Chương 2: Nội dung thực tập
Đợt thực tập với chủ đề “Lập trình backend server với Nodejs” nhằm mục đích giúpsinh viên thực tập được đào tạo toàn diện về lập trình server website, đồng thời rèn luyệnnhững kỹ năng mềm như làm việc nhóm, thuyết trình, giao tiếp 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 chuyên nghiệp
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áttriê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 tynhư 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ôngviệc…
2 Nghiên cứu kỹ thuật
2.1 Giới thiệu gitlab
Hình 2.1: Logo gitlab.com
Gitlab là hệ thống self-hosted mã nguồn mở dựa trên hệ thống máy chủ Git dùng
để quản lý mã nguồn của bạn Gitlab cung cấp giải pháp server một cách hoàn hảo và nhận
sự đánh giá cao từ cộng đồng
Những đặc điểm cần biết của Gitlab gồm:
- Phiên bản Gitlab: Hiện nay gitlab hỗ trợ 3 phiên bản là: Gitlab community edition (CE) là phiên bản cộng động, mã nguồn mở, cung cấp qua Git từ kho
lưu trữ chứa Gitlab Bản mới nhất của Gitlab được các nhà phát triển release
tại các nhánh stable và nhánh master Gitlab enterprise edition (EE) là gitlab
Trang 9phiên bản doanh nghiệp, có sẵn không lâu sau khi phát hành CE, được cungcấp từ kho lưu trữ Khi một doanh nghiệp đăng ký Gitlab sẽ nhận được support
của Gitlab khi gặp khó khăn trong quá trình cài đặt Gitlab continuous integration (CI) là một giải pháp tích hợp được thực hiện bởi nhóm phát triển
Gitlab
- Protected branches: Cho phép đọc hoặc ghi vào repository và các branches.
Protected branches cấp quyền cho những người được phép commit và pushingcode Một protected branch gồm 3 điều cơ bản Một là ngăn chặn việc push từtất cả mọi người trừ user và master Hai là ngăn chặn việc push code lênbranch từ những người không có quyền truy cập Ba là ngăn chặn bất kỳ ai
thực hiện xóa branch Master branch được mặc định là protected branch User
cần được cấp it nhất một quyền từ master branch để bảo mật branch
- Tầng vật lý của Gitlab:
Kho lưu trữ: là nơi xử lý các dự án trong Gitlab, các dự án hoặc sản phẩm có
thể được lưu tại kho
Nginx có cách thực hoạt động giống như front-desk: người dùng đến Nginx
và yêu cầu hành động được thực hiện bởi worker trong văn phòng
Gitlab-shell: là loại thứ ba của worker, thực hiện nhiệm vụ tạo các đơn đặt
hàng từ một máy fax (SSH) thay vì front-desk (HTTP) Gitlab-shell giao tiếpvới Sidekiq qua redis và hỏi những câu hỏi nhanh của Unicorn worker hoặctrực tiếp hoặc qua front-desk
Gitlab enterprise edition: là tập hợp các quy trình và hoạt động kinh doanh
được điều hành bởi office
- System layout: Khi nói đến git trong hình ảnh có thể hiểu thư mục home của
người dùng git là /home/git Repositories bare trong đường dẫn/home/git/repositories Gitlab là một ứng dụng được viết bằng ngôn ngữ ruby
on rails Do đó, để biết rõ các hoạt động bên trong bạn có thể tìm hiểu về hoạtđộng của ruby on rails
- Components:
Trang 10Hình 2.2: Sơ đồ kiến trúc components của gitlab
Những lý do chọn gitlab:
- Mang lại sự tiện lợi cho các lập trình viên khi cần lưu trữ, tải lên, tải xuốngcode
- Kiểm soát các thay đổi trong code nhanh chóng, chính xác
- Hỗ trợ việc quản lý, phân phối công việc trong dự án lập trình hiệu quả hơn
2.2 Giới thiệu Visual Studio Code
Hình 2.3: Chương trình Visual Studio Code Visual Studio Code là sản phẩm của Microsoft, ra mắt vào tháng 4 năm 2015 ở hội
nghị Build Đặc điểm nổi bật là đơn giản, gọn nhẹ, dễ dàng cài đặt
Visual Studio Code có thể cài đặt được trên cả Windows, Linux và Mac OS và hỗ trợ
nhiều ngôn ngữ khác nhau
Trang 11Visual Studio Code là một trình biên tập mã Nó hỗ trợ nhiều ngôn ngữ và chức năng
tùy vào ngôn ngữ sử dụng theo như trong bảng sau Nhiều chức năng của Visual Studio Codekhông hiển thị ra trong các menu tùy chọn hay giao diện người dùng Thay vào đó, chúngđược gọi thông qua khung nhập lệnh hoặc qua một tập tin json (ví dụ như tập tin tùy chỉnhcủa người dùng) Khung nhập lệnh là một giao diện theo dòng lệnh Tuy nhiên, nó biến mấtkhi người dùng nhấp bất cứ nơi nào khác, hoặc nhấn tổ hợp phím để tương tác với một cái gì
đó ở bên ngoài đó Tương tự như vậy với những dòng lệnh tốn nhiều thời gian để xử lý Khithực hiện những điều trên thì quá trình xử lý dòng lệnh đó sẽ bị hủy
2.3 Giới thiệu redmind
Hình 2.4: Logo redmind.org
Redmind là một công cụ được tạo ra nhằm mục đích theo dõi các vấn đề xẩy ra của một dự án và quản lý dự án đó Redmind hoạt động trên web miễn phí và mã nguồn mở đểngười dùng dễ dàng sử dụng Đây là phần mềm hỗ trợ cho người sử dụng quản lý nhiều dự
án cùng một lúc hoặc các tiểu dự án có liên quan đến nhau và liên quan đến dự án chính.Redmind có tính năng cho mỗi một dự án khác nhay và diễn đàn khác nhau Redmind giúptheo dõi thời gian, kiểm soát các truy cập với vai trò linh hoạt của nó trong từng dự án
Quản lý dự án Redmine sẽ giúp bạn dễ dàng hơn trong việc quản lý các vấn đề của dự
án web và được viết bằng Ruby on Rails Với việc sử dụng miễn phí phần mềm này đã giúpbạn quản lý dự án hiệu quả và khoa học hơn
2.4 Tìm hiểu về RESTful API
API (Application Programming Interface) là một tập các quy tắc và cơ chế mà theo
đó, một ứng dụng hay một thành phần sẽ tương tác với một ứng dụng hay thành phần khác.API có thể trả về dữ liệu mà bạn cần cho ứng dụng của mình ở những kiểu dữ liệu phổ biếnnhư JSON hay XML
REST (REpresentational State Transfer) là một dạng chuyển đổi cấu trúc dữ liệu,
một kiểu kiến trúc để viết API Nó sử dụng phương thức HTTP đơn giản để tạo cho giao tiếpgiữa các máy Vì vậy, thay vì sử dụng một URL cho việc xử lý một số thông tin người dùng,REST gửi một yêu cầu HTTP như GET, POST, DELETE, vv đến một URL để xử lý dữ liệu
Trang 12RESTful API là một tiêu chuẩn dùng trong việc thiết kế các API cho các ứng dụng
web để quản lý các resource RESTful là một trong những kiểu thiết kế API được sử dụngphổ biến ngày nay để cho các ứng dụng (web, mobile…) khác nhau giao tiếp với nhau
REST hoạt động chủ yếu dựa vào giao thức HTTP Các hoạt động cơ bản nêu trên sẽ
sử dụng những phương thức HTTP riêng
• GET (SELECT): Trả về một Resource hoặc một danh sách Resource
• POST (CREATE): Tạo mới một Resource
• PUT (UPDATE): Cập nhật thông tin cho Resource
• DELETE (DELETE): Xoá một Resource
Những phương thức hay hoạt động này thường được gọi là CRUD tương ứng với
Create, Read, Update, Delete – Tạo, Đọc, Sửa, Xóa
2.5 Tìm hiểu cở sở dữ liệu mongoDb
cố định (hay còn gọi là Big Data)
Một số đặc điểm của MongoDb:
- Kho lưu định hướng Document: Dữ liệu được lưu trong các tài liệu kiểu JSON
- Lập chỉ mục trên bất kỳ thuộc tính nào
- Các truy vấn đa dạng
Trang 132.6 Tìm hiểu về Nodejs
Hình 2.6 Logo Nodejs NodeJs là một nền tảng dựa vào Chrome Javascript runtime để xây dựng các ứng dụng nhanh, có độ lớn NodeJS sử dụng các phần phát sinh các sự kiện (event-driven), mô
hình non-blocking I/O để tạo ra các ứng dụng nhẹ và hiệu quả cho các ứng dụng về dữ liệuthời gian thực chạy trên các thiết bị phân tán
NodeJs là một mã nguồn mở, đa nền tảng cho phát triển các ứng dụng phía Server
và cácCác dự án theo quy trình Waterfall thường cần define cụ thể yêu cầu của dự án, trongkhi các yêu cầu trong các dự án Agile có thể thay đổi và phát triển
Trong các dự án Waterfall, bạn không thể thay đổi những thứ bạn đã làm trong nhữngcông đoạn trước, tuy nhiên Agile rất phù hợp và có thể đáp ứng được các thay đổi
2.7 Lập trình Typescript + một số thư viện hỗ trợ
Trang 14Hình 2.7: Logo Typescript
Typescript là một dự án mã nguồn mở được Microsoft phát triển, được xem là mộtphiên bản nâng cao của Javascript
TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript
TypeScript thêm các namespace, class và module tùy chọn vào JavaScript TypeScript
hỗ trợ các công cụ cho các ứng dụng JavaScript quy mô lớn cho bất kỳ trình duyệt nào, chobất kỳ máy chủ nào, trên bất kỳ hệ điều hành nào
Ưu điểm của Typescript:
- Dễ dàng hơn trong phát triển các dự án lớn, được hỗ trợ bởi các JavascriptFramework lớn
- Hỗ trợ OOP mạnh: Hầu hết các cú pháp hướng đối tượng đều được hỗ trợ bởi Typescript như kế thừa, đóng gói, constructor, abstract, interface, implement, override v.v
- Cách tổ chức code rõ ràng hơn bởi được hỗ trợ các kỹ thuật mới nhất và hỗ trợlập trình hướng đối tượng: Hỗ trợ cơ chế giúp kiến trúc hệ thống code hướng
Trang 15module, hỗ trợ namespace, giúp xây dựng các hệ thống lớn nơi mà nhiều dev
có thể làm việc cùng nhau một cách dễ dàng hơn
- Hỗ trợ các tính năng mới nhất của Javascript
- Một lợi thế của Typescript nữa là mã nguồn mở vì vậy nó miễn phí và có cộng đồng hỗ trợ rất lớn
Typescript đang được sử dụng ở các Framework Front-end phổ biến như
Angular 2, Ionic cũng như Nền tảng cho back-end như Node-js bởi những ưu điểm củamình
3 Thực hiện project
Sau gần một tháng được training và thực hành, thực tập sinh đã nắm được những kiếnthực cơ bản về mongoDb, nodejs, typescript Trong tháng thứ hai, trainer đã hướngdẫn thực tập sinh áp dụng những kiến thức đã học để thực hiện một project productcủa công ty
Chi tiết dự án sẽ được nói ở phần sau
Học cách trao đổi, làm việc qua slack
Anh Nguyễn Vĩnh Khiêm
1 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
Anh Trần Quốc Khánh
Trang 16 Tìm hiểu, ôn tập về Typescript, NodeJS,MongoDB
2 Tìm hiểu Typescript
3-7
Tham gia vào dự án PawnVn
Tìm hiểu cấu trúc project
Viết bắt đầu viết api
8 trở đi
Viết document và Swageer
Viết Unit test cho hệ thống
Tham gia các hoạt động nghiên cứu, cuộc thitại công ty
Trang 17Chươ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 đangtrong 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
3.1 Giới thiệu về PawnVn
a 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ôngqua ứ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
Trang 18- Bcrypt: BCrypt là một thuật toán mã hóa mật khẩu được thiết kế bởi NielsProvos 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ácnhau, việc này khiến cho việc dò tìm mật khẩu trở nên khó hơn
- 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
- Swagger-ui-express: Swagger UI là một tool cho phép bất kỳ ai - từ developerscho đế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
- Axios: Axios là một HTTP Client được viết dựa trên Promise, được dùng choviệc hỗ trợ xây dựng các ứng dụng API, nó có thể sử dụng trong React, Vue,Angular…
- 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ớidomain của trang đó CORS là viết tắt của từ Cross-origin resource sharing
Trang 19- Helmet: Helmet là một package được viêt để giúp bạn bảo vệ ứng dụng củamì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áchphù 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
- PM2: pm2 là một trình quản lý các process (tiến trình) dành cho các ứng dụngNodejs 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ònsố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 reverseproxy, HTTP load balancer và email proxy như IMAP, POP3, và SMTP
c 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