Tải bản đầy đủ (.pdf) (16 trang)

Báo cáo thực tập nestjs trong lập trình web

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (557.69 KB, 16 trang )

TRƯỜ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

NESTJS TRONG LẬP TRÌNH WEB

Cơng ty thực tập

: The New Tech

Người phụ trách

: Lê Công Nghĩa

Thực tập sinh

: Nguyễn Tấn Thành - 19522239

TP. Hồ Chí Minh, tháng 12 năm 2022


LỜI MỞ ĐẦU
Sự phát triển của công nghệ luôn nằm ở mức thay đổi chóng mặt. Chính sự phát triển
khơng ngừng ấy địi hỏi phải có cái mới hình thành, tiên tiến hơn và thay thế cái cũ. Trong lĩnh
vực cơng nghệ thơng tin, các lập trình viên ln phải cập nhật kiến thức không ngừng để bắt kịp
xu hướng để vừa hiện đại vừa tránh bị đào thải. “XU HƯỚNG” là cụm từ luôn được đề cập sau
mỗi lần chuyển đổi hoặc có sự ra đời mang tính chuyển biến của một ngơn ngữ hay cơng nghệ
nào đó.
NodeJS là một trong số ít nền tảng phát triển web và ứng dụng đã có sự tăng trưởng nhất
định kể từ khi ra mắt. NodeJS cực kì hữu ích trong việc đơn giản hóa quy trình làm việc của cơ


sở dữ liệu và cung cấp các giả pháp tuyệt vời đẻ tận dụng thời gian thực. Nhờ có NodeJS,
JavaScript đã trở thành một ngôn ngữ tuyệt vời trên web cho cả ứng dụng frontend và backend.
NodeJS giúp cải thiện năng suất của nhà phát triển và cho phép tạo ra các ứng dụng một cách
nhanh chóng, testable và scalable. NestJS là một trong những framework Node.JS cho phép xây
dựng ứng dụng phía server. Trong những năm gần đây NestJS được người dùng tin tưởng lựa
chọn. Với những tính năng vượt trội kết hợp với cách cài đặt đơn giản, an toàn NestJS nhanh
chóng “chiếm sóng” và trở thành trụ cột vững chắc giúp các máy chủ Node.js phát triển ở một
cấp độ hoàn toàn mới.
Sau một thời gian học tập tại trường, với mong muốn trao dồi kinh nghiệm thực tế, cũng
như tham gia làm việc trong môi trường doanh nghiệp. Vì vậy bản thân quyết định chọn The
New Tech – một công ty với môi trường làm việc lý tưởng, chuyên nghiệp, năng động để thực
hiện dự án lần này.


LỜI CẢM ƠN
Trân trọng gửi lời cảm ơn Công ty cổ phần The New Tech đã 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 mentor và các thành
viên trong team Back-end em đã tiếp thu được những kiến thức quan trọng về lập trình web
back-end nói chung hay NestJS nói riêng. Chân thành cảm ơn các anh chị trong công ty đã bỏ ra
nhiều thời gian, công sức để hướng dẫn em hồn thành đợt thực tập này.
Bên cạnh đó, em cũng xin gửi lời cảm ơn chân thành đến các thầy cô giáo trường Đại
học Công nghệ Thông tin, ĐHQG – HCM nói chung và các thầy cơ trong Khoa Cơng nghệ
Phần mềm nói riêng đã giảng dạy những kiến thức nền tảng quan trọng thời gian qua giúp em
hoàn thành đề tài lần này 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.
Sau đây là báo cáo kết quả của quá trình tìm hiểu, nghiên cứu, thực hiện trong thời gian
thực tập, bên cạnh đó sẽ khơng tránh khỏi những thiếu sót. Em rất mong nhận được những lời
nhận xét và đóng góp của q thầy cơ để bài báo cáo được hồn thiện.
Em xin chân thành cảm ơn!

Nguyễn Tấn Thành
Thành phố Hồ Chí Minh, ngày 17 tháng 12 năm 2022


NHẬN XÉT CỦA KHOA

..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................


MỤC LỤC
LỜI MỞ ĐẦU ............................................................................................................................................ 2
LỜI CẢM ƠN ............................................................................................................................................ 3
MỤC LỤC .................................................................................................................................................. 5

CHƯƠNG 1: GIỚI THIỆU CÔNG TY THỰC TẬP ................................................................................. 6
1. Giới thiệu công ty The New Tech ................................................................................................... 6
2. Một Số Sản phẩm của công ty ......................................................................................................... 6
CHƯƠNG 2: NỘI DUNG THỰC TẬP ..................................................................................................... 8
1. Tìm hiểu cơng ty.............................................................................................................................. 8
2. Nghiên cứu kỹ thuật ........................................................................................................................ 8
2.1.

Các công cụ làm việc ............................................................................................................... 8

2.2.

Tìm hiểu NestJS ....................................................................................................................... 8

2.3.

Github Action và NPM ............................................................................................................ 9

3. Lịch làm việc ................................................................................................................................. 11
CHƯƠNG 3: CHI TIẾT VỀ PROJECT ................................................................................................... 14
1. Nội dung Project ............................................................................................................................ 14
2. Kết quả đạt được............................................................................................................................ 14
TÀI LIỆU THAM KHẢO ........................................................................................................................ 15
TỔNG KẾT .............................................................................................................................................. 16


CHƯƠNG 1: GIỚI THIỆU CÔNG TY THỰC TẬP
1. Giới thiệu công ty The New Tech
Được thành lập từ tháng 4 năm 2021, The New Tech là công ty phần mềm chuyên
cung cấp các dịch vụ phát triển ứng dụng, thiết bị hỗ trợ tự động hóa với đối tác chính là

The New Gym.
Trong thời gian vừa qua, The New Tech luôn nỗ lực hết sức để trở thành một trong
những cái tên nổi bật và đáng tin cậy trong cộng đồng công ty công nghệ tại Việt Nam.
Với mục tiêu xây dựng các sản phẩm sáng tạo, giải quyết những thách thức kỹ thuật
được đặt ra. Công ty sẽ biến những ý tưởng của khách hàng thành những sản phẩm ổn
định và chất lượng giúp tối ưu hóa q trình vận hành, quản lí của các đối tác.

2. Một Số Sản phẩm của công ty
The New Gym app customer: Là một ứng dụng chó phép người dùng đăng kí gói tập
và các dịch vụ của phịng gym, ngồi ra người dùng cịn có thể đặt lịch tập với huấn
luyện viên.
The New Gym app PT: Ứng dụng dùng để kết nối huấn luyện viên tới khách hàng,
ngoài việc xác nhận/hủy buối tập với khách hàng còn các chức năng khác như thống kê
doanh thu với mỗi PT, xem lịch dạy…
CRM là một trang web quản lý chuỗi phong gym.Gồm một số chức năng như thống
kê dữ liệu, quản lí tài khoản khách hàng, nhân viên, huấn luyện viên và các dịch vụ được
cung cấp bởi đối tác.


POS WEB là trang web được sử dụng cho lễ tân hỗ trợ các chức năng: quản lí khách
hàng tại phịng tập, thanh tốn hóa đơn tại quầy…Và cịn một số các sản phẩm khác như
thiết bị ra vào cổng, web đăng kí dịch vụ…


CHƯƠNG 2: NỘI DUNG THỰC TẬP
1. Tìm hiểu cơng ty
Thời gian : 1 ngày
Nội dung : Được nghe người phụ trách giới thiệu về cơng ty, q trình thành lập và phát
triể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. Ngồi ra cịn
các thông tin cần thiết khác như thời gian làm việc, yêu cầu về sử dụng các tài khoản

được cấp. Giao lưu với mọi người. Tìm hiểu các sản phẩm của công ty.
Kết quả : Biết được các thông tin cơ bản của cơng ty( q 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
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. Người
hướng dẫn hỗ trợ cài đặt và sử dụng các phần mềm, package cơng ty đang sử dụng
trong quy trình phát triển( DataGrip, máy ảo, ubuntu, slack, terminator, zsh…).
Thực hiện: Thực hành cài đặt, sử dụng các phần mềm trên.
Kết quả : Nắm được cách cài đặt, setup các công cụ hỗ trợ trên.

2.2.

Tìm hiểu NestJS
Nội dung :
• NestJS là một framework Node.JS cho phép xây dựng ứng dụng phía server. Nest
mở rộng các framework Node.js như Express hay Fastify để bổ sung thêm nhiều
module hay thư viện hỗ trợ việc xử lý tác vụ. Đây là một framework mã nguồn
mở, sử dụng TypeScript và rất linh hoạt để xây dựng các hệ thống backend. Bên
cạnh đó, NestJS cịn giúp mở rộng các server Node để hỗ trợ những cơ sở dữ liệu
như MongoDB, Redis hay Apache Cassandra.
• Cấu trúc của NestJS:
− NestJS được xây dựng từ nhiều yếu tố khác nhau, tuy nhiên quan trọng nhất là
ba thành phần chính sau:
− Modules: được sử dụng để tổ chức code và chia các tính năng thành các đơn
vị có thể tái sử dụng hợp lý. Các tệp TypeScript được nhóm bằng Decorator

“@Module”. Decorator “@Module” cung cấp siêu dữ liệu cho NestJS giúp nó


xác định các thành phần, bộ điều khiển hay những tài nguyên khác để sắp xếp
cấu trúc ứng dụng khoa học, hiệu quả.
− Providers: Một thành phần không thể thiếu ở NestJS đó là Providers. Nó
tương tự như một dịch vụ giúp xử lý những tác vụ mang tính phức tạp, logic
mà các trình xử lý Controller khơng thể làm được. Providers có thể được tạo
và đưa vào Controllers hoặc Providers khác.
− Controllers: Chức năng chính của Controllers là xử lý các yêu cầu gửi đến và
đáp trả lại cho client-side. Sau khi nhận được yêu cầu HTTP nó sẽ soạn thảo
câu trả lời chính xác, phù hợp nhất để gửi đi. Mỗi Controllers sẽ có bộ lộ trình
riêng để giúp nó thực hiện tốt các tác vụ khác nhau.
• Tính năng NestJS:
− Sử dụng TypeScript và cho phép ngơn ngữ lập trình này thích ứng nhanh để
đáp ứng mọi thay đổi của JavaScript.
− Cài đặt đơn giản, dễ sử dụng, không mất nhiều thời gian để học hỏi, nghiên
cứu.
− Tăng hiệu suất và dễ dàng phát triển nhờ giao diện dòng lệnh CLI mạnh mẽ.
− Nguồn tài liệu đa dạng, phong phú, chi tiết và được duy trì tốt.
− Khả năng mở rộng, phát triển và bảo trì cơ sở mã đang hoạt động.
− Là mã nguồn mở của Node.js phát triển mạnh mẽ vượt bậc nhất trong vài năm
trở lại đây.
− Hỗ trợ mô đun giúp các ứng dụng tích hợp các cơng nghệ và khái niệm phổ
biến như Caching, WebSockets, Logging, Validation, TypeORM,
Mongoose…
− Được tạo cho Micro-services và Monoliths.
Thực hiện:
- Tìm hiểu các kiến thức liên quan đến NestJS
- Báo cáo lại cho người hướng dấn tiến trình tìm hiểu, người hướng dẫn sẽ giải đáp

các vấn đề tồn đọng trong quá trình tìm hiểu.
- Xây dựng một server đơn giản với NestJS gồm các chức năng chính như CRUD
account.
Kết quả :
- Nắm được kiến thức cơ bản về NestJS, tạo được một project nhỏ với NestJS
2.3.

Github Action và NPM
Nội dung:
• GitHub Actions là một nền tảng CI / CD cho phép bạn tự động hóa quy trình
build, test và deploy sản phẩm. GitHub actions hoạt động theo hướng sự kiện,


nghĩa là nó sẽ thực hiện một loạt commands đã được định nghĩa sẵn khi có một sự
kiện được xảy ra.
• Thành Phần GitHub Actions:

− Workflows:
Workflow là một quy trình tự động thực hiện một hay nhiều công việc nào đó.
Workflow được xác định bởi file .yml trong thư mục .github/workflow và sẽ được
thực hiện sau khi một event xảy ra( push, pull request…)
Workflows có thể được định nghĩa để build, test, release, deploy.... một dự án trên
Github.
− Events
Events là một trigger đặc biệt để workflow bắt đầu. ví dụ như, bạn có thể cấu hình để
workflow bắt đầu khi có một người nó đó push code hoặc tạo merger request lên
branch develop. Bạn có thể sử dụng repository dispatch webhook để trigger một
workflow khi một sự kiện bên ngoài xảy ra.
− Jobs
Jobs là tập hợp các bước thược hiện một cơng việc của một runner. Mặc định thì các

jobs trong một workflow được chạy song song. Bạn cũng có thể cấu hình để các jobs


chạy một các tuần tự. Ví dụ trong một workflow có thể có jobs là build, run test case.
Nhưng nếu build fails thì test case sẽ khơng được run.
− Steps
Steps là một tác vụ độc lập nó có thể là một command trong một jobs. Mỗi steps có
thể là một action hoặc một command để thực hiện một hành động nào đó. Mỗi step
trong một job thực thi trong cùng một runner, có thể share data từ steps này với step
khác.
− Actions
Actions là một command độc lập khi kết hợp lại tạo thành một steps để tạo ra jobs
trong workflow. Actions là đơn vị nhỏ nhất của một workflow là thành phần trực tiếp
thực hiện các tác vụ mong muốn. Có thể tự customize một action hoặc sử dụng các
action có sẵn của github.
− Runners
Runners là một server được cài đặt sẵn GitHub Actions runner application. Bạn có
thể sử dụng runner hosted bởi GitHub tự host cho mình để sử dụng. Một runner luôn
sẵn sàng lắng nghe các jobs, run một job tại một thời điểm, report process, logs và trả
kết quả về cho GitHub. Với GitHub-hosted runner mỗi job được runs trên một máy
ảo hồn tịan mới (Điều này có nghĩa là mỗi job đều cần có bước setup mơi trường từ
đầu ).
Thực hiện:
− Tìm hiểu lý thuyết về github actions, npm.
− Tạo một node package có nhiệm vụ truyền nhận dữ liệu giữa gateway và
service trong mơ hình microservice.
− Sử dụng github actions để build và publish package.
Kết quả:
− Nắm được các kiến thức cơ bản về github actions, cách tạo một node package
− Áp dụng lý thuyết build một package có áp dụng github actions.


3. Lịch làm việc


Cơng việc

Tuần
-

-

1

-

-

2

-

3

-

4

-

5

6

-

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 slack.
Tìm hiểu NestJS
Tạo một ứng dụng
backend với các chức
năng (crud account,
authentication)
Tìm hiểu NestJS, cơ
chế
authen,
phân
quyền trong project
cơng ty.
Tìm hiểu access token,
refresh token.
Làm task deactive
token, đăng xuất phía
server cho website
quản lí và lễ tân.
Đọc source code của

cơng ty
Viết một số api cho
website quản lí
Tham gia vào q trình
phát triển chức năng
mới
Viết một middleware
ghi lại thông tin thay
đổi của khách hàng
mỗi lần cập nhập
profile cá nhân.
Chỉnh sửa cấu trúc, tối
ưu source code của
cơng ty.
Tham gia vào q trình
triển khai hệ thống

Người hướng
dẫn
Lê Công Nghĩa

Lê Công Nghĩa

Lê Công Nghĩa

Lê Công Nghĩa

Lê Cơng Nghĩa

Lê Cơng Nghĩa


Mức độ
hồn
thành

Nhận xét của
người hướng dẫn


-

7

-

8

-

mới (hệ thống thanh
toán,
mua
hàng
online).
Khởi tạo source code,
viết các api cho các
chức năng như crud
account, quản lí khách
hàng, quản lí gói nạp
point …

Tìm hiểu về github Lê Cơng Nghĩa
actions, npm
Tạo một node package
hỗ trợ truyền nhận dữ
liệu trong mơ hình
microservices
Tối ưu, hồn thiện Lê Cơng Nghĩa
package.
Tích
hợp
github
actions để tự động hóa
việc build, deploy
package.


CHƯƠNG 3: CHI TIẾT VỀ PROJECT
1. Nội dung Project
-

Khi làm việc với kiến trúc microservices, nhân thấy được vấn đề còn tồn đọng về việc
truyền nhận dữ liệu giữa gateway và các services đó là mỗi khi cần lấy data từ một bảng
nào đó đều phải viết hai phương thức mới (ở phía gateway để gửi request và ở phía
service để nhận và xử lý request đó) do đó sẽ xuất hiện sự trùng lặp cách xử lí code ở
những phương thức chung như findOne, update, saveDate…. Vì các phương thức này
được áp dụng trên toàn bộ hệ thống nên cần build một package chung để xử lí điều này
để tránh trùng lặp code, tối ưu resource, đảm bảo pattern, thuận tiện trong việc get data
và update data trên gateway.

-


Ngoài ra để tối ưu hơn trong quá trình phát triển, packge được áp dụng github actions
giúp tự động build, publish.

-

Package được cài đặt ở cả gateway và service. Khi sử dụng các phương thức được cung
cấp phía gateway sẽ gửi một request chứa các hằng số ứng với tên action (findOne,
update…) và tên table được lấy dữ liệu. Phía service sẽ nhân thông qua một message
chung đối với các phương thức này, dựa vào các hằng số và action để xử lí u cầu.

2. Kết quả đạt được
-

Hồn thiện được package phục vụ cho quy trình phát triển tại cơng ty

-

Học được các kiến thức liên quan vầ npm, github actions

-

Học được cách phân tích và xử lí vấn đề


TÀI LIỆU THAM KHẢO
[1] />[2] />[3] />[4] a/p/ban-da-biet-cach-tao-github-private-package-1VgZvJQYZAw
[5] a/p/build-va-publish-mot-npm-typescript-package-gDVK2nGnKLj



TỔNG KẾT
Sau khoảng thời gian 2 tháng thực tập, được tham gia vào các dự án thực tế đã
giúp em có cơ hội cọ sát và hiện thực hóa các kiến thức của bản thân tới người sử dụng.
Trong thời gian đó em đã được bổ sung nhiều kiến thức mới, trao dồi kĩ năng báo cáo,
thuyết trình, làm việc nhóm,… Một lần nữa, em xin chân thành cảm ơn thầy cô đã cho
em cơ hội được thực tập, trau dồi kinh nghiệm và ứng dụng những kiến thức và kỹ năn
được học ở trong và ngồi trường trong mơi trường làm việc thực tế. Cảm ơn các thành
viên trong nhóm đã cùng em nghiên cứu, tìm hiểu những nội dung cần thiết, căn bản và
giúp đỡ em trong quá trình thực hiện đề tài này.



×