1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo nghiên cứu về cách tạo back end trong javasript bằng node js

29 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Báo cáo nghiên cứu về cách tạo back end trong javascript bằng node js
Tác giả Nguyễn Xuân Hải, Nguyễn Trung Hậu
Trường học Công Ty Cổ Phần Xuất Nhập Khẩu Thủy Sản Cửu Long An Giang
Thể loại Báo cáo
Năm xuất bản 2022
Thành phố An Giang
Định dạng
Số trang 29
Dung lượng 184,11 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Để làmđiều này, chúng tôi sẽ đặt nó trong tệp riêng của nó được gọi làgreeting.js const greeting = functionname { console.log`Hello ${name}, welcome to NodeJS` } - Theo mặc định NodeJS k

Trang 1

Email: clfish@vnn.vn Website: http://www.clfish.com

“CẢI TIẾN HOẶC LÀ CHẾT”

BÁO CÁO NGHIÊN CỨU VỀ CÁCH TẠO BACK END TRONG JAVASRIPT BẰNG

NODE.JS



Duyệt Ban Giám Đốc Người thực hiện

Nguyễn Xuân Hải Nguyễn Trung Hậu

Tháng 08/ 2022

Trang 2

DANH MỤC TÀI LIỆU



1 I: Giới thiệu về Node.js

3 III: Thao tác với tệp và thư mục NodeJS

4 IV: Tạo HTTP Server đầu tiên

9 IX: Tài liệu tham khảo

Cửu Long, ngày 16 tháng 08 năm 2022

 Duyệt BGĐ  Người lập

Trang 3

I: GIỚI THIỆU VỀ NODE.JS.

- NodeJS cho phép bạn chạy mã JavaScript bên ngoài trình duyệt

- Node.js là một môi trường máy chủ mã nguồn mở, miễn phí sử dụngngôn ngữ JavaScript để tạo các ứng dụng web phía máy chủ (phụ trợ)

- Node.js hoạt động trên các nền tảng khác nhau (Windows, Linux, Unix, Mac OS X, v.v.) Với Node.js chúng ta có thể xây dựng một ứngdụng web nhanh chóng và có khả năng mở rộng cao

- Sử dụng Node.js cũng có nghĩa là chúng ta có thể sử dụng JavaScript trên toàn bộ ngăn xếp, tức là cùng một ngôn ngữ cho frontend và backend Vì vậy, phát triển nhanh chóng và hiệu quả hơn

- Node.js có một thư viện khổng lồ gồm các gói làm sẵn sẽ giúp bạn tiết kiệm rất nhiều thời gian Các thư viện này được quản lý bởi NPM (Node Package Manager)

- Một tính năng đặc biệt của Node.js là nó sử dụng lập trình không đồng bộ (chạy nhiều tác vụ cùng một lúc) so với lập trình đồng bộ (chạy từng tác vụ một) được tìm thấy trên nhiều ngôn ngữ lập trình phía máy chủ như PHP và Ruby

Trang 4

II: NODEJS MODULE SYSTEM.

const name = 'Mike Taylor'

const greeting = function(name) { console.log(`Hello ${name}, welcome to NodeJS`)

} greeting(name)

- Có thể thú vị khi làm cho module lời chào có thể tái sử dụng Để làmđiều này, chúng tôi sẽ đặt nó trong tệp riêng của nó được gọi làgreeting.js

const greeting = function(name) { console.log(`Hello ${name}, welcome to NodeJS`)

}

- Theo mặc định NodeJS không cho phép sử dụng chức năng này từ mộtmodule khác Để làm điều này, bạn phải chỉ ra cho module những yếu tốnào có thể xuất được:

const greeting = function(name) { console.log (`Hello ${name}, welcome to NodeJS`)

} module.exports = greeting

- Lưu ý ở đây dòng cuối cùng 'module.exports = greeting' , chức năngnày cho phép sử dụng hàm lời chào từ một module khác

Trang 5

- Từ app.js giờ đây bạn có thể tải module này bằng chức năng 'require'

const greeting = require('./greeting.js')

const name = 'Mike Taylor' greeting(name)

- Hàm 'require' sẽ tạo một tham chiếu với module lời chào và đặt thamchiếu này trong biến lời chào const (biến này có thể được gọi là tên khácngoài lời chào)

- Lưu ý rằng hàm require ('./greeting.js') sử dụng đường dẫn './' điều nàycho phép chỉ ra cho NodeJS rằng module nằm trong cùng thư mụcapp.js của chúng ta

- Do đó, nhiều lần xuất được thực hiện với một đối tượng có chứa một

Trang 6

modules.exports = hello // app.js

const hello = require('./ hello.js')

- Ngay sau khi NodeJS thực thi dòng này, module hello cũng được thựcthi Trong ví dụ này, module chỉ thực hiện xuất nhưng nếu module chứa

mã thì nó sẽ được thực thi, đây là một ví dụ

// hello.js

const hello = function() { console.log('Hello World') }

console.log('Hello Node!') modules.exports = hello

// app.js const hello = require('./ hello.js') Hello()

- Nếu bạn đã khởi chạy app.js, bạn sẽ thấy rằng nó sẽ hiển thị 'HelloNode!' trước 'Hello World' vì như đã đề cập, 'require' thực thi module

- Hãy tính đến thực tế này khi bạn tạo các module của mình để tránhhành vi không mong muốn

Trang 7

III: THAO TÁC VỚI TỆP VÀ THƯ MỤC NODEJS.

2 Module Path - Module 'path' chứa các chức năng cho phép xử lý thích hợp các vị trí

thư mục và tệp

- Để tham chiếu một module, chỉ cần sử dụng tên của module đó

const path = require('path')

products_path = '/data/products/products.json' products_file = path.basename(products_path) console.log(products_file) // products.json

- Hàm path.basename() cho phép bạn chỉ trả về tên của tệp để trong trường hợp này là 'products.json'

- Một hàm tiện dụng khác là path.join() Chức năng này cho phép bạn nối với nhau một hoặc nhiều thư mục và tệp ví dụ:

const path = require('path')

data_folder = '/data/' products_folder = '/products' products_file = 'products.json'

const full_path = path.join(data_folder, products_folder, products_file)

/data/products/products.json

- path.join() ghép nối tất cả các đoạn đường dẫn đã cho lại với nhau bằng cách sử dụng dấu phân cách dành riêng cho nền tảng làm dấu phân cách, sau đó chuẩn hóa đường dẫn kết quả

Trang 8

- Cuối cùng, đôi khi bạn muốn có đường dẫn tuyệt đối trên máy chủ

const path = require('path')

data_folder = '/data/' products_folder = '/products' products_file = 'products.json'

const full_path = path.join(data_folder, products_folder, products_file)

const abs_path = path.resolve( dirname, 'data', 'products', 'products.json')

console.log(abs_path) //

/Users/username/Documents/dev/learn_node/data/ products/products.json

- path.resolve() xử lý chuỗi các đường dẫn từ phải sang trái, với mỗiđường dẫn tiếp theo được thêm vào trước cho đến khi một đường dẫntuyệt đối được xây dựng

File System - Chắc chắn là một trong những module được sử dụng nhiều nhất,module này cho phép bạn xử lý các tệp và thư mục trên máy chủ

- Module FS cho phép thao tác các tệp và thư mục theo hai cách khácnhau Bạn có thể làm điều này ở chế độ đồng bộ hoặc không đồng bộ

Phương pháp nào để sử dụng?

- Nó phụ thuộc vào loại ứng dụng bạn muốn phát triển Ví dụ: nếu bạnđang phát triển một máy chủ web trong trường hợp này, tốt hơn là,không phải nói là cần thiết, sử dụng một chức năng không đồng bộ Mộtchức năng đồng bộ sẽ chặn việc thực thi máy chủ không chỉ cho người

Trang 9

dùng hiện tại mà còn chặn tất cả người dùng.

- Mặt khác, trong một số trường hợp rất chính xác, việc sử dụng mộtchức năng đồng bộ có thể được chứng minh Ví dụ: trước khi khởi chạymáy chủ web, nếu bạn cần đọc tệp cấu hình, trong trường hợp này, chứcnăng đồng bộ đảm bảo rằng bạn sẽ đọc tệp trước khi máy chủ được khởichạy

- Hãy xem một ví dụ về việc sử dụng module 'fs' với hai loại hàm: Chứcnăng đồng bộ

// app.js const fs = require('fs')

const data = fs.readFileSync('info.txt', 'utf-8') console.log(data) // file content

console.log('The file has been read')

- Ở đây kết quả có thể dễ dàng dự đoán được, mã sẽ được thực thi từngdòng

- Hàm không đồng bộ

const fs = require('fs')

const info = fs.readFile('info.txt', 'utf-8', (err, data)

=> { console.log(data) })

console.log('The file has been read')

- Ở đây, NodeJS sẽ không đợi hàm quay trở lại để tiếp tục thực thi

- Điều này sẽ dẫn đến hậu quả của việc hiển thị 'Tệp đã được đọc' trước

và khi readFile() đã hoàn thành công việc của nó, NodeJS sẽ thực thibảng điều khiển hàm callback.log (data)

Trang 10

fs.writeFile('info.txt', data, 'utf-8', (err) => { console.log('File created')

- Nếu tệp không tồn tại, bạn có thể trả về lỗi

const info = fs.readFile('info.txt', 'utf-8', (err, data)

=> {

if (err) console.log(err) else

console.log(data) })

- Cũng có thể đọc một tệp với readFile nhưng sử dụng lời hứa

const fs = require('fs').promises

const start = async () => { const data = await fs.readFile('info.txt', 'utf8') console.log(data)

} start()

- Nhập khác nhau và cú pháp khác nhau nhưng cùng một kết quảSao chép tệp

- Để sao chép một tập tin, chúng tôi sử dụng chức năng copyFile

fs.copyFile('info.txt', 'info2.txt', (err) => {

if (err) return console.error(err)

Trang 11

console.log('File copied') })

Tạo thư mục

- Để tạo một thư mục, chúng tôi sử dụng chức năng mkdir

fs.mkdir('data', (err) => { console.log('Data folder created') })

- Thư mục được tạo bên trong thư mục hiện tại

Liệt kê các tệp trong một thư mục

- Có thể lấy danh sách các tệp trong một thư mục

fs.readdir('.', (err, files) => { console.log(files)

})

- '.' đại diện cho các tệp hiên tại là một mảng chứa tất cả tên tệp thư mục

Đổi tên tệp

- Để đổi tên một tập tin, chúng ta sử dụng hàm rename()

fs.rename('info.txt', 'data.txt', (err) => {

if (err) return console.log(err) console.log('File renamed') })

Trang 12

IV: TẠO HTTP SERVER ĐẦU TIÊN.

})

- Hãy xem từng dòng các bước khác nhau để tạo máy chủ

- Đang tải module HTTP

const http = require('http')

- Tạo máy chủ với chức năng gọi lại Lưu ý rằng có hai tham số được chuyển đến hàm: req và res

 req: sẽ chứa thông tin về yêu cầu đến

 res: sẽ được sử dụng để xác định phản hồi đi

const server = http.createServer((req, res) => { // send the response

res.end('Hello World from the server') })

Trang 13

- res.end() cho máy chủ biết rằng phản hồi đã hoàn tất và bây giờ có thể được gửi

- Khởi động máy chủ Máy chủ sẽ đợi và đọc các yêu cầu đến trên cổng 5000

server.listen(5000, 'localhost', () => { console.log('Server is listening at localhost on port 5000')

})

- Đây là một vòng lặp vô tận Mỗi khi một yêu cầu sẽ được gửi đến máy chủ của chúng tôi tại cổng 5000 (ví dụ: localhost: 5000), máy chủ sẽ thực hiện cuộc gọi lại (xem khối mã trước đó) và do đó trong trường hợp này gửi phản hồi 'Xin chào thế giới từ máy chủ'

- Nếu bạn muốn kiểm tra máy chủ này, hãy khởi chạy ứng dụng

$ node app.js Server is listening at localhost on port 5000

- Mở trình duyệt của bạn và truy cập localhost: 5000

- Thông báo 'Hello World from the server' sẽ hiển thị trong trình duyệtcủa bạn Trong thực tế, nếu bạn truy cập bất kỳ trang nào, ví dụ:

localhost: 5000 / về cùng một thông báo sẽ luôn được hiển thị

- Thông tin đường dẫn được bao gồm trong yêu cầu

- Để đọc thông tin về yêu cầu, chúng tôi sẽ sử dụng đối tượng 'req'

mà như bạn biết chứa tất cả thông tin của yêu cầu

- Cụ thể, đường dẫn url nằm trong thuộc tính 'req.url'

- Đây là một ví dụ về một máy chủ HTTP nhỏ, tùy thuộc vào url nhận được, hiển thị một trang khác

const http = require('http')

const server = http.createServer((req, res) => {

if (req.url === '/') { res.end('<h1>Home page</h1>') } else if (req.url === '/about') { res.end('<h1>About page</h1>') } else {

res.end('page not found') }

}) server.listen(5000, 'localhost', () => {

Trang 14

console.log('Server is listening at localhost on port 5000')

})

3 Tiêu đề HTTP

- Tiêu đề HTTP cho phép máy khách và máy chủ truyền thông tin bổ sung cùng với yêu cầu hoặc phản hồi

- Ví dụ: Tiêu đề của một yêu cầu có thể chứa định dạng nội dung của

nó ex.HTML hoặc JSON và / hoặc thông tin liên quan để xác thực người dùng

res.end('<h1>Page not found</h1>')

- Chức năng writeHead cho phép bạn chỉ định loại nội dung của tin nhắn, có thể là 'text / html'

- Khi chạy hàm res.end() NodeJS sẽ bao gồm Header vào response

5

Máy chủ

HTTP đầu

tiên của bạn

- Thì đấy, bạn đã tạo máy chủ HTTP đầu tiên của mình Mặc dù đây

là một máy chủ rất cơ bản vào lúc này, hãy nhớ rằng máy chủ HTTP chỉ đơn giản là một chuỗi các yêu cầu và phản hồi

- Vì vậy, ở dạng đơn giản nhất, ứng dụng web của bạn sẽ làm được điều đó Điều đó có nghĩa là, xử lý các yêu cầu và trả lại phản hồi

Trang 15

V: NODE PACKAGE MANAGER (NPM).

- NPM đã được cài đặt sẵn với NodeJS Nó là một ứng dụng dòng lệnh

sẽ cho phép cài đặt gói bạn chọn

- NPM cung cấp một hệ thống cho phép quản lý các gói đã cài đặt vàphiên bản của chúng Việc quản lý này được thực hiện với sự trợ giúpcủa một tệp có tên 'package.json'

- Tệp 'package.json' này là duy nhất cho ứng dụng của chúng ta và chứadanh sách các 'dependencies' của dự án của chúng ta Điều đó có nghĩa

là danh sách tất cả các gói đã cài đặt và phiên bản của chúng

- Tệp này cũng chứa các thông tin khác về dự án của bạn như tên, tác giả

và tệp bắt đầu (tệp đầu tiên mà Node.jS sẽ chạy) Cũng có thể tạo cáclệnh script' để khởi chạy các chức năng nhất định như khởi chạy máychủ hoặc biên dịch và thực thi dự án

- Bạn có thể tạo tệp 'package.json' này theo cách thủ công hoặc chạylệnh NPM để thực hiện tự động

Trang 16

- Sau khi gói được cài đặt, bạn có thể tham khảo tệp 'package.json', bạn

sẽ tìm thấy gói 'slugify' được liệt kê trong danh sách 'dependencies' ởđó:

{ "dependencies": { "slugify": "^1.6.0"

} }

- Lưu ý rằng các tệp nguồn của các gói này đều đã được sao chép vàothư mục 'node_modules'

- Gói này hiện có thể được sử dụng trong ứng dụng của bạn

const slugify = require('slugify')

console.log(slugify('My New Web Site')) // My-New-Web-Site

- NPM cũng có thể cài đặt các gói trên toàn cầu để bất kỳ ứng dụngNode.js nào trên máy tính của bạn đều có thể nhập và sử dụng các gói đãcài đặt NPM cài đặt các gói toàn cục trong thư mục//local/lib/node_modules

- Thêm -g vào lệnh install để cài đặt gói trên toàn cục

$ npm install create-react-app -g

- Hầu hết thời gian, bạn sẽ cần đặc quyền của quản trị viên để cài đặtmột gói trên toàn cầu Trong trường hợp này, hãy sử dụng lệnh sudo(trên Mac)

$ sudo npm install create-react-app -g

bản

- Chúng ta có thể thấy số phiên bản của gói trong tệp 'package.json'

"dependencies": { "slugify": "^1.4.7"

}

- Số version (eg 1.4.7):

 Major version (1): Phiên bản mới với những thay đổi đột phá

Trang 17

 Minor version (4): Tính năng mới nhưng không có thay đổi độtphá

 Patch version (7): Chỉ các lỗi mới được sửa

 Version prefix: ^ 1.4.7: Chấp nhận cập nhật phiên bản phụ ~ 1.4.7: Chỉ chấp nhận cập nhật phiên bản vá

 1.4.7: Chấp nhận tất cả các bản cập nhật phiên bản (không được khuyến nghị)

nút (NPX)

- npx là viết tắt của Node Package thực thi Nó là một công cụ được thiết kế đặc biệt để thực thi các gói Khi bạn khởi chạy việc thực thi một gói bằng công cụ này, npx sẽ tìm trong biến "PATH" của máy tính sau đó trong các tệp nhị phân của các mô-đun dự án để khởi chạy lệnh Nếu nó chưa tìm thấy nó, công cụ thậm chí có thể lên web để tìm lệnh và sau đó thực thi nó

- Gói được thực thi trong thư mục hiện tại npx cũng có thể được sử dụng trong phần "tập lệnh" của tệp "packages.json", để đặt các lệnh khởi chạy máy chủ hoặc nền tảng khi khởi động

Khởi chạy một gói với npx

npx creat-react-app my-app

Trang 18

7 Gói nodemon

- Khi bạn phát triển một ứng dụng NodeJS, mỗi khi bạn sửa đổi mã của mình, bạn phải dừng máy chủ và khởi động lại ứng dụng của mình Đó là một sự lãng phí thời gian rất lớn

- May mắn thay, có một công cụ để khắc phục điều này: nodemonnodemon là một công cụ giúp phát triển các ứng dụng dựa trên Node.js bằng cách tự động khởi động lại ứng dụng Node khi phát hiệnthấy các thay đổi tệp trong thư mục

- nodemon không yêu cầu bất kỳ sửa đổi bổ sung nào đối với mã hoặcphương pháp phát triển của bạn nodemon là một wrapper thay thế cho Node Để sử dụng nodemon, hãy thay thế nút từ trên dòng lệnh khi chạy tập lệnh của bạn

- Ví dụ sử dụng để khởi chạy / kiểm tra ứng dụng của bạn:

$ npx nodemon app.js

- Chỉ cài đặt mô-đun trong chế độ phát triển

$ sudo npm install nodemon -D

- Cũng có thể cài đặt gói nodemon trên toàn cầu Bằng cách này, bạn

Trang 19

VI: NODEJS HOẠT ĐỘNG NHƯ THẾ NÀO?

libuv

- Là một thư viện mã nguồn mở, được viết bằng C ++ chuyên thực thi

i / o không đồng bộ (ví dụ: Hệ thống tệp, Mạng và hơn thế nữa)

- libuv triển khai hai tính năng rất quan trọng của NodeJS: Event Loop

- Hãy tưởng tượng, ví dụ, nếu có 100.000 người dùng trên trang web cùng một lúc yêu cầu quyền truy cập vào cơ sở dữ liệu, thời gian phảnhồi sẽ nhanh chóng trở nên không thể chấp nhận được Đây là lý do tại sao NodeJS cần quản lý hiệu quả việc thực thi mã không đồng

Ngày đăng: 08/02/2025, 09:19

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. Website: https://dev.to/ericchapman/create-a-backend-in-javascript-introduction-to-node-js-215a Link
2. Website: https://dev.to/ericchapman/create-a-backend-in-javascript-nodejs-module-system-4165 Link
3. Website: https://dev.to/ericchapman/create-a-backend-in-javascript-nodejs-files-and-folders-manipulation-3782 Link
4. Website: https://dev.to/ericchapman/create-a-backend-in-javascript-part-4-create-your-first-http-server-5k1 Link
5. Website: https://dev.to/ericchapman/create-a-backend-in-javascript-part-5-node-package-manager-npm-584g Link
6. Website: https://dev.to/ericchapman/create-a-backend-in-javascript-part-6-how-nodejs-work-under-the-hood-2l3l Link
7. Website: https://dev.to/ericchapman/create-a-backend-in-javascript-part-7-nodejs-events-and-streams-10fb Link
8. Website: https://stackjava.com/nodejs/node-js-ket-noi-mysql.html Link

HÌNH ẢNH LIÊN QUAN

Bảng điều khiển →.log ('Đầu tiên') - Báo cáo nghiên cứu về cách tạo back end trong javasript bằng node js
ng điều khiển →.log ('Đầu tiên') (Trang 22)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w