Node.js cho phép các nhà phát triển sử dụng JavaScript để viết mã back-end, mặc dù theo truyền thống, nó được sử dụng trong trình duyệt để viết mã front-end. Có cả…

Bạn đang xem: node js http server example

Tác giả đã chọn COVID-19 Relief Fund để nhận một khoản đóng góp là một phần của chương trình Viết để quyên góp .

Giới thiệu

Khi bạn xem một trang web trong trình duyệt của mình, bạn đang thực hiện một yêu cầu tới một máy tính khác trên internet, máy tính này sau đó sẽ cung cấp cho bạn trang web đó dưới dạng phản hồi. Máy tính mà bạn đang nói chuyện qua internet là một máy chủ web. Máy chủ web nhận các yêu cầu HTTP từ một ứng dụng khách, chẳng hạn như trình duyệt của bạn và cung cấp phản hồi HTTP, như trang HTML hoặc JSON từ một API.

Rất nhiều phần mềm liên quan đến một máy chủ để trả về một trang web. Phần mềm này thường chia thành hai loại: giao diện người dùng và phụ trợ. Mã giao diện người dùng quan tâm đến cách trình bày nội dung, chẳng hạn như màu sắc của thanh điều hướng và kiểu văn bản. Mã back-end liên quan đến cách dữ liệu được trao đổi, xử lý và lưu trữ. Mã xử lý các yêu cầu mạng từ trình duyệt của bạn hoặc giao tiếp với cơ sở dữ liệu chủ yếu được quản lý bằng mã back-end.

Node.js cho phép các nhà phát triển sử dụng JavaScript để viết mã back-end, mặc dù theo truyền thống, mã này được sử dụng trong trình duyệt để viết mã front-end. Việc kết hợp cả frontend và backend như vậy sẽ giảm bớt công sức tạo ra một máy chủ web, đó là lý do chính khiến Node.js là một lựa chọn phổ biến để viết mã back-end.

Trong hướng dẫn này, bạn sẽ học cách xây dựng máy chủ web bằng mô-đun http được bao gồm trong Node.js. Bạn sẽ xây dựng các máy chủ web có thể trả về dữ liệu JSON, tệp CSV và các trang web HTML.

Điều kiện tiên quyết

Bước 1 – Tạo Máy chủ HTTP Cơ bản

Hãy bắt đầu bằng cách tạo một máy chủ trả về văn bản thuần túy cho người dùng. Phần này sẽ bao gồm các khái niệm chính cần thiết để thiết lập máy chủ, điều này sẽ cung cấp nền tảng cần thiết để trả về các định dạng dữ liệu phức tạp hơn như JSON.

Trước tiên, chúng tôi cần thiết lập một môi trường mã hóa có thể truy cập để thực hiện các bài tập của chúng tôi, cũng như các môi trường khác trong bài viết. Trong terminal, hãy tạo một thư mục có tên là first-server :

  
  1. mkdir

    first-server

Sau đó, nhập thư mục đó:

  
  1. cd

    máy chủ đầu tiên

Bây giờ, hãy tạo tệp chứa mã:

  
  1. touch

    hello.js

Mở tệp trong trình soạn thảo văn bản. Chúng tôi sẽ sử dụng nano vì nó có sẵn trong thiết bị đầu cuối:

  
  1. nano

    hello.js

Chúng tôi bắt đầu bằng cách tải mô-đun http tiêu chuẩn với tất cả các cài đặt Node.js. Thêm dòng sau vào hello.js :

first-server / hello.js

  

const

http

=

yêu cầu

(

"http"

)

;

Mô-đun http chứa chức năng tạo máy chủ mà chúng ta sẽ thấy ở phần sau. Nếu bạn muốn tìm hiểu thêm về các mô-đun trong Node.js, hãy xem bài viết Cách tạo mô-đun Node.js của chúng tôi.

Bước tiếp theo của chúng tôi sẽ là xác định hai hằng số, máy chủ và cổng mà máy chủ của chúng tôi sẽ bị ràng buộc:

first-server / hello.js

  

...

const

host

=

'localhost'

;

const

port

=

8000

;

Như đã đề cập trước đây, máy chủ web chấp nhận yêu cầu từ trình duyệt và các ứng dụng khách khác. Chúng tôi có thể tương tác với máy chủ web bằng cách nhập tên miền, được máy chủ DNS dịch sang địa chỉ IP. Địa chỉ IP là một dãy số duy nhất xác định một máy trên mạng, chẳng hạn như internet. Để biết thêm thông tin về các khái niệm tên miền, hãy xem bài viết Giới thiệu về thuật ngữ, thành phần và khái niệm DNS của chúng tôi.

Giá trị localhost là một địa chỉ riêng đặc biệt mà các máy tính sử dụng để tham chiếu đến chính nó. Nó thường tương đương với địa chỉ IP nội bộ 127.0.0.1 và nó chỉ khả dụng với máy tính cục bộ chứ không phải với bất kỳ mạng cục bộ nào mà chúng tôi đã tham gia hoặc với internet.

Cổng là một số mà máy chủ sử dụng làm điểm cuối hoặc “cửa” tới địa chỉ IP của chúng tôi. Trong ví dụ của chúng tôi, chúng tôi sẽ sử dụng cổng 8000 cho máy chủ web của chúng tôi. Các cổng 8080 8000 thường được sử dụng làm cổng mặc định trong quá trình phát triển và trong hầu hết các trường hợp, các nhà phát triển sẽ sử dụng chúng thay vì các cổng khác cho máy chủ HTTP.

Khi chúng tôi liên kết máy chủ của mình với máy chủ và cổng này, chúng tôi sẽ có thể truy cập máy chủ của mình bằng cách truy cập http: // localhost: 8000 trong trình duyệt cục bộ.

Hãy thêm một chức năng đặc biệt, trong Node.js, chúng tôi gọi là trình xử lý yêu cầu. Chức năng này dùng để xử lý một yêu cầu HTTP đến và trả về một phản hồi HTTP. Hàm này phải có hai đối số, một đối tượng yêu cầu và một đối tượng phản hồi. Đối tượng yêu cầu nắm bắt tất cả dữ liệu của yêu cầu HTTP đến. Đối tượng phản hồi được sử dụng để trả lại phản hồi HTTP cho máy chủ.

Chúng tôi muốn máy chủ đầu tiên của mình trả lại thông báo này bất cứ khi nào ai đó truy cập vào nó: "Máy chủ đầu tiên của tôi!" .

Hãy thêm chức năng đó tiếp theo:

first-server / hello.js

  

...

const

requestListener

=

hàm

(

req

,

res

)

{

res

.

writeHead

(

200

)

;

res

.

kết thúc

(

" Máy chủ đầu tiên của tôi! "

)

;

}

;

Hàm thường sẽ được đặt tên dựa trên chức năng của nó. Ví dụ: nếu chúng tôi đã tạo một hàm lắng nghe yêu cầu để trả về một danh sách sách, chúng tôi có thể sẽ đặt tên cho nó là listBooks () . Vì đây là trường hợp mẫu, chúng tôi sẽ sử dụng tên chung requestListener .

Tất cả các hàm xử lý yêu cầu trong Node.js chấp nhận hai đối số: req res (chúng ta có thể đặt tên khác nếu muốn). Yêu cầu HTTP mà người dùng gửi được ghi lại trong một đối tượng Yêu cầu, tương ứng với đối số đầu tiên, req . Phản hồi HTTP mà chúng tôi trả lại cho người dùng được hình thành bằng cách tương tác với đối tượng Phản hồi trong đối số thứ hai, res .

Dòng đầu tiên res.writeHead (200); đặt mã trạng thái HTTP của phản hồi. Mã trạng thái HTTP cho biết máy chủ xử lý một yêu cầu HTTP tốt như thế nào. Trong trường hợp này, mã trạng thái 200 tương ứng với "OK" . Nếu bạn muốn tìm hiểu về các mã HTTP khác nhau mà máy chủ web của bạn có thể trả về với ý nghĩa mà chúng biểu thị, thì hướng dẫn của chúng tôi về Cách khắc phục sự cố mã lỗi HTTP phổ biến là một nơi tốt để bắt đầu.

Dòng tiếp theo của hàm, res.end ("Máy chủ đầu tiên của tôi!"); , ghi phản hồi HTTP trở lại ứng dụng khách đã yêu cầu. Hàm này trả về bất kỳ dữ liệu nào mà máy chủ phải trả về. Trong trường hợp này, nó đang trả về dữ liệu văn bản.

Cuối cùng, bây giờ chúng tôi có thể tạo máy chủ của mình và sử dụng trình xử lý yêu cầu của chúng tôi:

first-server / hello.js

  

...

const

server

=

http

.

createServer

(

requestListener

)

; máy chủ

.

lắng nghe

(

cổng

,

máy chủ

,

(

)

= & gt;

{

bảng điều khiển

.

nhật ký

(

`

Máy chủ đang chạy trên http: //

$ {

host

}

:

$ {

port

}

`

)

; < / p>

}

)

;

Lưu và thoát nano bằng cách nhấn CTRL + X .

Trong dòng đầu tiên, chúng tôi tạo một đối tượng server mới qua hàm http module’s createServer () . Máy chủ này chấp nhận các yêu cầu HTTP và chuyển chúng đến hàm requestListener () của chúng tôi.

Sau khi chúng tôi tạo máy chủ của mình, chúng tôi phải liên kết nó với một địa chỉ mạng. Chúng tôi thực hiện điều đó với phương thức server.listen () . Nó chấp nhận ba đối số: port , host hàm gọi lại sẽ kích hoạt khi máy chủ bắt đầu lắng nghe.

Tất cả các đối số này là tùy chọn, nhưng bạn nên nêu rõ cổng và máy chủ lưu trữ nào mà chúng tôi muốn máy chủ web sử dụng. Khi triển khai máy chủ web tới các môi trường khác nhau, cần biết cổng và máy chủ mà nó đang chạy để thiết lập cân bằng tải hoặc bí danh DNS .

Chức năng gọi lại ghi một thông báo vào bảng điều khiển của chúng tôi để chúng tôi có thể biết khi nào máy chủ bắt đầu lắng nghe các kết nối.

Lưu ý: Mặc dù requestListener () không sử dụng đối tượng req , nó vẫn phải là đối số đầu tiên của hàm. < / p>

Với ít hơn mười lăm dòng mã, chúng tôi hiện có một máy chủ web. Hãy xem nó hoạt động và kiểm tra nó từ đầu đến cuối bằng cách chạy chương trình:

  
  1. node

    hello.js

Trong bảng điều khiển, chúng ta sẽ thấy kết quả này:

  

Đầu ra

Máy chủ đang chạy trên http: // localhost: 8000

Lưu ý rằng lời nhắc biến mất. Điều này là do máy chủ Node.js là một quá trình chạy lâu dài. Nó chỉ thoát nếu gặp lỗi khiến nó bị treo và thoát hoặc nếu chúng tôi dừng quá trình Node.js đang chạy máy chủ.

Trong một cửa sổ đầu cuối riêng biệt, chúng tôi sẽ giao tiếp với máy chủ bằng cURL , một công cụ CLI để truyền dữ liệu đến và từ mạng. Nhập lệnh để thực hiện yêu cầu HTTP GET tới máy chủ đang chạy của chúng tôi:

  
  1. curl

    http: // localhost: 8000

Khi chúng tôi nhấn ENTER , thiết bị đầu cuối của chúng tôi sẽ hiển thị kết quả sau:

  

Đầu ra

Máy chủ đầu tiên của tôi!

Hiện chúng tôi đã thiết lập một máy chủ và nhận được phản hồi từ máy chủ đầu tiên của chúng tôi.

Hãy phân tích những gì đã xảy ra khi chúng tôi kiểm tra máy chủ của mình. Sử dụng cURL, chúng tôi đã gửi một yêu cầu GET tới máy chủ tại http: // localhost: 8000 . Máy chủ Node.js của chúng tôi đã lắng nghe các kết nối từ địa chỉ đó. Máy chủ đã chuyển yêu cầu đó đến hàm requestListener () . Hàm trả về dữ liệu văn bản với mã trạng thái 200 . Sau đó, máy chủ đã gửi lại phản hồi đó tới cURL, nơi hiển thị thông báo trong thiết bị đầu cuối của chúng tôi.

Trước khi tiếp tục, hãy thoát khỏi máy chủ đang chạy của chúng tôi bằng cách nhấn CTRL + C . Điều này làm gián đoạn quá trình thực thi của máy chủ của chúng tôi, đưa chúng tôi trở lại lời nhắc dòng lệnh.

Trong hầu hết các trang web chúng tôi truy cập hoặc các API chúng tôi sử dụng, phản hồi của máy chủ hiếm khi ở dạng văn bản thuần túy. Chúng tôi lấy các trang HTML và dữ liệu JSON làm định dạng phản hồi phổ biến. Trong bước tiếp theo, chúng ta sẽ tìm hiểu cách trả lại phản hồi HTTP ở các định dạng dữ liệu phổ biến mà chúng ta gặp trên web.

Bước 2 – Trả lại các loại nội dung khác nhau

Phản hồi mà chúng tôi trả lại từ máy chủ web có thể có nhiều định dạng. JSON và HTML đã được đề cập trước đây và chúng tôi cũng có thể trả về các định dạng văn bản khác như XML và CSV. Cuối cùng, máy chủ web có thể trả về dữ liệu không phải văn bản như PDF, tệp nén, âm thanh và video.

Trong bài viết này, ngoài văn bản thuần túy mà chúng tôi vừa trả lại, bạn sẽ tìm hiểu cách trả lại các loại dữ liệu sau:

  • JSON
  • CSV
  • HTML

Ba loại dữ liệu này đều dựa trên văn bản và là các định dạng phổ biến để phân phối nội dung trên web. Nhiều ngôn ngữ và công cụ phát triển phía máy chủ có hỗ trợ trả về các kiểu dữ liệu khác nhau này. Trong ngữ cảnh của Node.js, chúng ta cần làm hai điều:

  1. Đặt tiêu đề Content-Type trong phản hồi HTTP của chúng tôi với giá trị thích hợp.
  2. Đảm bảo rằng res.end () nhận dữ liệu ở định dạng phù hợp.

Hãy xem điều này hoạt động với một số ví dụ. Đoạn mã chúng ta sẽ viết trong phần này và những đoạn sau có nhiều điểm tương đồng với đoạn mã chúng ta đã viết trước đó. Hầu hết các thay đổi tồn tại trong hàm requestListener () . Hãy tạo tệp bằng “mã mẫu” này để làm cho các phần trong tương lai dễ theo dõi hơn.

Tạo một tệp mới có tên html.js . Tệp này sẽ được sử dụng sau đó để trả về văn bản HTML trong phản hồi HTTP. Chúng tôi sẽ đặt mã mẫu ở đây và sao chép mã đó sang các máy chủ khác trả về nhiều loại khác nhau.

Trong thiết bị đầu cuối, nhập thông tin sau:

  
  1. touch

    html.js

Bây giờ, hãy mở tệp này trong một trình soạn thảo văn bản:

  
  1. nano

    html.js

Hãy sao chép “mã mẫu”. Nhập mã này vào nano :

first-server / html.js

  

const

http

=

yêu cầu

(

"http"

)

;

const

host

=

'localhost'

;

const

port

=

8000

;

const

requestListener

=

hàm

(

req

,

res

)

{

}

;

const

server

=

http

.

createServer

(

requestListener

)

; máy chủ

.

lắng nghe

(

cổng

,

máy chủ

,

(

)

= & gt;

{

bảng điều khiển

.

nhật ký

(

`

Máy chủ đang chạy trên http: //

$ {

host

}

:

$ {

port

}

`

)

; < / p>

}

)

;

Lưu và thoát html.js bằng CTRL + X , sau đó quay lại thiết bị đầu cuối.

Bây giờ, hãy sao chép tệp này thành hai tệp mới. Tệp đầu tiên sẽ trả về dữ liệu CSV trong phản hồi HTTP:

  
  1. cp

    html.js csv.js

Tệp thứ hai sẽ trả về phản hồi JSON trong máy chủ:

  
  1. cp

    html.js json.js

Các tệp còn lại sẽ dành cho các bài tập sau:

  
  1. cp

    html.js htmlFile.js
  2. cp

    html.js route.js

Giờ đây, chúng tôi đã thiết lập để tiếp tục các bài tập của mình. Hãy bắt đầu với việc trả lại JSON.

Đang cung cấp JSON

JavaScript Object Notation, thường được gọi là JSON, là một định dạng trao đổi dữ liệu dựa trên văn bản. Như tên gọi của nó, nó có nguồn gốc từ các đối tượng JavaScript, nhưng nó độc lập với ngôn ngữ, nghĩa là nó có thể được sử dụng bởi bất kỳ ngôn ngữ lập trình nào có thể phân tích cú pháp của nó.

JSON thường được sử dụng bởi các API để chấp nhận và trả về dữ liệu. Sự phổ biến của nó là do kích thước truyền dữ liệu thấp hơn so với các tiêu chuẩn trao đổi dữ liệu trước đây như XML, cũng như công cụ tồn tại cho phép các chương trình phân tích cú pháp mà không cần nỗ lực quá nhiều. Nếu muốn tìm hiểu thêm về JSON, bạn có thể đọc hướng dẫn của chúng tôi về Cách làm việc với JSON trong JavaScript .

Mở tệp json.js bằng nano :

  
  1. nano

    json.js

Chúng tôi muốn trả lại phản hồi JSON. Hãy sửa đổi hàm requestListener () để trả về tiêu đề thích hợp mà tất cả các phản hồi JSON có bằng cách thay đổi các dòng được đánh dấu như sau:

first-server / json.js

  

...

const

requestListener

=

hàm

(

req

,

res

)

{

res

.

setHeader

(

" Loại nội dung "

,

" ứng dụng / json "

)

;

}

;

...

Phương thức res.setHeader () thêm tiêu đề HTTP vào phản hồi. Tiêu đề HTTP là thông tin bổ sung có thể được đính kèm vào một yêu cầu hoặc phản hồi. Phương thức res.setHeader () nhận hai đối số: tên của tiêu đề và giá trị của nó.

Tiêu đề Content-Type được sử dụng để biểu thị định dạng của dữ liệu, còn được gọi là loại phương tiện, được gửi cùng với yêu cầu hoặc phản hồi. Trong trường hợp này, Content-Type của chúng tôi là application / json .

Bây giờ, hãy trả lại nội dung JSON cho người dùng. Sửa đổi json.js để nó trông giống như sau:

first-server / json.js

  

...

const

requestListener

=

hàm

(

req

,

res

)

{

res

.

setHeader

(

" Loại nội dung "

,

" ứng dụng / json "

)

;

res

.

writeHead

(

200

)

;

res

.

kết thúc

(

`

{"nội dung": "Đây là phản hồi JSON"}

`

)

;

}

;

...

Giống như trước đây, chúng tôi cho người dùng biết rằng yêu cầu của họ đã thành công bằng cách trả lại mã trạng thái là 200 . Lần này trong lệnh gọi response.end () , đối số chuỗi của chúng tôi chứa JSON hợp lệ.

Lưu và thoát json.js bằng cách nhấn CTRL + X . Bây giờ, hãy chạy máy chủ bằng lệnh node :

  
  1. node

    json.js

Trong một thiết bị đầu cuối khác, hãy truy cập máy chủ bằng cách sử dụng cURL:

  
  1. curl

    http: // localhost: 8000

Khi chúng ta nhấn ENTER , chúng ta sẽ thấy kết quả sau:

  

Đầu ra

{"nội dung": "Đây là phản hồi JSON"}

Giờ đây, chúng tôi đã trả lại thành công phản hồi JSON, giống như nhiều API phổ biến mà chúng tôi tạo ứng dụng. Đảm bảo thoát khỏi máy chủ đang chạy bằng CTRL + C để chúng tôi có thể quay lại lời nhắc đầu cuối tiêu chuẩn. Tiếp theo, hãy xem xét một định dạng dữ liệu trả về phổ biến khác: CSV.

Đang phân phát CSV

Định dạng tệp Giá trị được phân tách bằng dấu phẩy (CSV) là một tiêu chuẩn văn bản thường được sử dụng để cung cấp dữ liệu dạng bảng. Trong hầu hết các trường hợp, mỗi hàng được phân tách bằng một dòng mới và mỗi mục trong hàng được phân tách bằng dấu phẩy.

Trong không gian làm việc của chúng tôi, hãy mở tệp csv.js bằng trình chỉnh sửa văn bản:

  
  1. nano

    csv.js

Hãy thêm các dòng sau vào hàm requestListener () của chúng tôi:

first-server / csv.js

  

...

const

requestListener

=

hàm

(

req

,

res

)

{

res

.

setHeader

(

" Loại nội dung "

,

" văn bản / csv "

)

;

res

.

setHeader

(

" Nội dung-Bố trí "

,

" tệp đính kèm; filename = Oceanpals.csv "

)

;

}

;

...

Lần này, Content-Type của chúng tôi cho biết rằng tệp CSV đang được trả về dưới dạng giá trị là text / csv . Tiêu đề thứ hai mà chúng tôi thêm là Content-Disposition . Tiêu đề này cho trình duyệt biết cách hiển thị dữ liệu, đặc biệt là trong trình duyệt hoặc dưới dạng tệp riêng biệt.

Khi chúng tôi trả lại phản hồi CSV, hầu hết các trình duyệt hiện đại sẽ tự động tải xuống tệp ngay cả khi tiêu đề Content-Disposition không được đặt. Tuy nhiên, khi trả về tệp CSV, chúng ta vẫn nên thêm tiêu đề này vì nó cho phép chúng ta đặt tên của tệp CSV. Trong trường hợp này, chúng tôi báo hiệu với trình duyệt rằng tệp CSV này là tệp đính kèm và nên được tải xuống. Sau đó, chúng tôi cho trình duyệt biết rằng tên của tệp là oceanpals.csv .

Hãy ghi dữ liệu CSV trong phản hồi HTTP:

first-server / csv.js

  

...

const

requestListener

=

hàm

(

req

,

res

)

{

res

.

setHeader

(

" Loại nội dung "

,

" văn bản / csv "

)

;

res

.

setHeader

(

" Nội dung-Bố trí "

,

" tệp đính kèm; filename = Oceanpals.csv "

)

;

res

.

writeHead

(

200

)

;

res

.

kết thúc

(

`

id, tên, email \ n1, Sammy Shark, shark @ ocean.com

`

)

;

}

;

...

Giống như trước khi chúng tôi trả lại trạng thái 200 / OK với phản hồi của chúng tôi. Lần này, lệnh gọi của chúng tôi tới res.end () có một chuỗi là CSV hợp lệ. Dấu phẩy phân tách giá trị trong mỗi cột và ký tự dòng mới ( \ n) phân tách các hàng. Chúng ta có hai hàng, một cho tiêu đề bảng và một cho dữ liệu.

Chúng tôi sẽ kiểm tra máy chủ này trong trình duyệt. Lưu csv.js và thoát khỏi trình chỉnh sửa bằng CTRL + X .

Chạy máy chủ bằng lệnh Node.js:

  
  1. node

    csv.js

Trong một Thiết bị đầu cuối khác, hãy truy cập máy chủ bằng cách sử dụng cURL:

  
  1. curl

    http: // localhost: 8000

Bảng điều khiển sẽ hiển thị điều này:

  

Đầu ra

id, tên, email 1, Sammy Shark, shark @ ocean.com

Nếu chúng tôi truy cập http: // localhost: 8000 trong trình duyệt của mình, một tệp CSV sẽ được tải xuống. Tên tệp của nó sẽ là oceanpals.csv .

Thoát khỏi máy chủ đang chạy bằng CTRL + C để quay lại lời nhắc đầu cuối tiêu chuẩn.

Sau khi trả lại JSON và CSV, chúng tôi đã đề cập đến hai trường hợp phổ biến đối với API. Hãy chuyển sang cách chúng tôi trả lại dữ liệu cho các trang web mà mọi người xem trong trình duyệt.

Phân phát HTML

HTML, Ngôn ngữ đánh dấu siêu văn bản , là định dạng phổ biến nhất được sử dụng khi chúng tôi muốn người dùng tương tác với máy chủ của chúng tôi thông qua trình duyệt web. Nó được tạo ra để cấu trúc nội dung web. Trình duyệt web được xây dựng để hiển thị nội dung HTML, cũng như bất kỳ kiểu nào chúng tôi thêm vào bằng CSS , một công nghệ web giao diện người dùng khác cho phép chúng tôi thay đổi tính thẩm mỹ của các trang web của mình.

Hãy mở lại html.js bằng trình chỉnh sửa văn bản của chúng tôi:

  
  1. nano

    html.js

Sửa đổi hàm requestListener () để trả về tiêu đề Content-Type thích hợp cho phản hồi HTML:

first-server / html.js

  

...

const

requestListener

=

hàm

(

req

,

res

)

{

res

.

setHeader

(

" Loại nội dung "

,

" văn bản / html "

)

;

}

;

...

Bây giờ, hãy trả lại nội dung HTML cho người dùng. Thêm các dòng được đánh dấu vào html.js để nó trông giống như sau:

first-server / html.js

  

...

const

requestListener

=

hàm

(

req

,

res

)

{

res

.

setHeader

(

" Loại nội dung "

,

" văn bản / html "

)

;

res

.

writeHead

(

200

)

;

res

.

kết thúc

(

`

& lt; html & gt; & lt; body & gt; & lt; h1 & gt; Đây là HTML & lt; / h1 & gt; & lt ; / body & gt; & lt; / html & gt;

`

)

;

}

;

...

Đầu tiên, chúng tôi thêm mã trạng thái HTTP. Sau đó, chúng tôi gọi response.end () với đối số chuỗi chứa HTML hợp lệ. Khi chúng tôi truy cập vào máy chủ của mình trong trình duyệt, chúng tôi sẽ thấy một trang HTML có một thẻ tiêu đề chứa Đây là HTML .

Hãy lưu và thoát bằng cách nhấn CTRL + X . Bây giờ, hãy chạy máy chủ bằng lệnh node :

  
  1. node

    html.js

Chúng tôi sẽ thấy Máy chủ đang chạy trên http: // localhost: 8000 khi chương trình của chúng tôi bắt đầu.

Bây giờ, hãy vào trình duyệt và truy cập http: // localhost: 8000 . Trang của chúng tôi sẽ trông như thế này:

Hình ảnh phản hồi HTML được trả về từ máy chủ Node.js

Hãy thoát khỏi máy chủ đang chạy bằng CTRL + C và quay lại lời nhắc đầu cuối tiêu chuẩn.

Thông thường HTML được viết trong một tệp, tách biệt với mã phía máy chủ như các chương trình Node.js của chúng tôi. Tiếp theo, hãy xem cách chúng tôi có thể trả lại phản hồi HTML từ tệp.

Bước 3 – Cung cấp trang HTML từ tệp

Chúng tôi có thể cung cấp HTML dưới dạng chuỗi trong Node.js cho người dùng, nhưng tốt hơn hết là chúng tôi tải các tệp HTML và phân phát nội dung của họ. Bằng cách này, khi tệp HTML phát triển, chúng tôi không phải duy trì các chuỗi dài trong mã Node.js của mình, giữ cho mã ngắn gọn hơn và cho phép chúng tôi làm việc trên từng khía cạnh của trang web một cách độc lập. Sự “tách biệt các mối quan tâm” này phổ biến trong nhiều thiết lập phát triển web, vì vậy bạn nên biết cách tải các tệp HTML để hỗ trợ nó trong Node.js

Để phân phát tệp HTML, chúng tôi tải tệp HTML bằng mô-đun fs và sử dụng dữ liệu của nó khi viết phản hồi HTTP của chúng tôi.

Đầu tiên, chúng tôi sẽ tạo một tệp HTML mà máy chủ web sẽ trả về. Tạo một tệp HTML mới:

  
  1. touch

    index.html

Bây giờ, hãy mở index.html trong trình soạn thảo văn bản:

  
  1. nano

    index.html

Trang web của chúng tôi sẽ rất nhỏ. Nó sẽ có nền màu cam và sẽ hiển thị một số văn bản chúc mừng ở trung tâm. Thêm mã này vào tệp:

first-server / index.html

  

& lt ;!

LOẠI TÀI LIỆU

html

& gt;

& lt;

đầu

& gt; < / p>

& lt;

title

& gt; < / p>

Trang web của tôi

& lt; /

title

& gt;

& lt;

style

& gt; < / p>

*, html

{

margin

:

0

;

padding

:

0

;

border

:

0

;

}

html

{

width

:

100%

;

height

:

100%

;

}

body

{

width

:

100%

;

height

:

100%

;

vị trí

:

tương đối

;

background-color

:

rgb

(

236

,

152

,

42

) < / p>

;

}

. center

{

width

:

100%

;

height

:

50%

;

margin

:

0

;

vị trí

:

tuyệt đối

;

top

:

50%

;

còn lại

:

50%

;

chuyển đổi

:

dịch

(

-50%

,

-50%

)

;

color

:

white

;

font-family

:

"Trebuchet MS"

,

Helvetica

,

sans-serif

;

text-align

:

center

;

}

h1

{

font-size

:

144px

;

}

p

{

font-size

:

64px

;

}

& lt; /

style

& gt;

& lt; /

đầu

& gt;

& lt;

body

& gt; < / p>

& lt;

div

class

=

"

center

"

& gt;

& lt;

h1

& gt; < / p>

Xin chào lần nữa!

& lt; /

h1

< p class = "dấu chấm câu"> & gt;

& lt;

p

& gt; < / p>

Điều này được cung cấp từ một tệp

& lt; /

p

p>

& gt;

& lt; /

div

& gt;

& lt; /

body

& gt;

& lt; /

html

& gt;

Trang web này hiển thị hai dòng văn bản: Xin chào lần nữa! Dòng này được cung cấp từ một tệp . Các dòng xuất hiện ở trung tâm của trang, một dòng phía trên nhau. Dòng đầu tiên của văn bản được hiển thị trong một tiêu đề, có nghĩa là nó sẽ lớn. Dòng văn bản thứ hai sẽ xuất hiện nhỏ hơn một chút. Tất cả văn bản sẽ có màu trắng và trang web có nền màu cam.

Nếu bạn muốn tìm hiểu thêm về HTML, CSS và các công nghệ web front-end khác, bạn có thể xem hướng dẫn Bắt đầu với Web của Mozilla.

Lưu và thoát tệp bằng CTRL + X . Bây giờ chúng ta có thể chuyển sang mã máy chủ.

Đối với bài tập này, chúng tôi sẽ làm việc với htmlFile.js . Mở nó bằng trình soạn thảo văn bản:

  
  1. nano

    htmlFile.js

Khi chúng ta phải đọc một tệp, hãy bắt đầu bằng cách nhập mô-đun fs :

first-server / htmlFile.js

  

const

http

=

yêu cầu

(

"http"

)

;

const

fs

=

yêu cầu

(

'fs'

)

. hứa hẹn

;

...

Mô-đun này chứa hàm readFile () mà chúng tôi sẽ sử dụng để tải tệp HTML tại chỗ. Chúng tôi nhập biến thể hứa hẹn phù hợp với các phương pháp hay nhất về JavaScript hiện đại. Chúng tôi sử dụng các lời hứa làm cú pháp của nó ngắn gọn hơn là gọi lại, chúng tôi sẽ phải sử dụng nếu chúng tôi chỉ định fs cho request ('fs') . Để tìm hiểu thêm về các phương pháp hay nhất về lập trình không đồng bộ, bạn có thể đọc Hướng dẫn cách viết mã không đồng bộ trong Node.js của chúng tôi.

Chúng tôi muốn tệp HTML của mình được đọc khi người dùng yêu cầu hệ thống của chúng tôi. Hãy bắt đầu bằng cách sửa đổi requestListener () để đọc tệp:

first-server / htmlFile.js

  

...

const

requestListener

=

hàm

(

req

,

res

)

{

fs

.

readFile

(

__dirname

+

" / index.html "

)

}

;

...

Chúng tôi sử dụng phương thức fs.readFile () để tải tệp. Đối số của nó có __dirname + "/index.html" . Biến đặc biệt __dirname có đường dẫn tuyệt đối về nơi mã Node.js đang được chạy. Sau đó, chúng tôi thêm /index.html để chúng tôi có thể tải tệp HTML mà chúng tôi đã tạo trước đó.

Bây giờ, hãy trả lại trang HTML sau khi nó được tải:

first-server / htmlFile.js

  

...

const

requestListener

=

hàm

(

req

,

res

)

{

fs

.

readFile

(

__dirname

+

" / index.html "

)

.

thì

(

nội dung

= & gt;

{

res

.

setHeader

(

" Loại nội dung "

,

" văn bản / html "

)

;

res

.

writeHead

(

200

)

;

res

.

kết thúc

(

nội dung

)

;

}

)

}

;

...

Nếu lời hứa fs.readFile () được giải quyết thành công, nó sẽ trả về dữ liệu của nó. Chúng tôi sử dụng phương thức then () để xử lý trường hợp này. Tham số content chứa dữ liệu của tệp HTML.

Đầu tiên, chúng tôi đặt tiêu đề Content-Type thành text / html để cho khách hàng biết rằng chúng tôi đang trả lại dữ liệu HTML. Sau đó, chúng tôi viết mã trạng thái để cho biết yêu cầu đã thành công. Cuối cùng, chúng tôi gửi cho khách hàng trang HTML mà chúng tôi đã tải, với dữ liệu trong biến nội dung .

Phương thức fs.readFile () đôi khi có thể bị lỗi, vì vậy chúng tôi nên xử lý trường hợp này khi gặp lỗi. Thêm cái này vào hàm requestListener () :

first-server / htmlFile.js

  

...

const

requestListener

=

hàm

(

req

,

res

)

{

fs

.

readFile

(

__dirname

+

" / index.html "

)

.

thì

(

nội dung

= & gt;

{

res

.

setHeader

(

" Loại nội dung "

,

" văn bản / html "

)

;

res

.

writeHead

(

200

)

;

res

.

kết thúc

(

nội dung

)

;

}

)

.

bắt

(

err

= & gt;

{

res

.

writeHead

(

500

)

;

res

.

kết thúc

(

err

)

;

trả về

;

}

)

;

}

;

...

Lưu tệp và thoát khỏi nano bằng CTRL + X .

Khi một lời hứa gặp lỗi, lời hứa đó sẽ bị từ chối. Chúng tôi xử lý trường hợp đó bằng phương thức catch () . Nó chấp nhận lỗi mà fs.readFile () trả về, đặt mã trạng thái thành 500 biểu thị rằng đã gặp lỗi nội bộ và trả lại lỗi cho người dùng.

Chạy máy chủ của chúng tôi bằng lệnh node :

  
  1. node

    htmlFile.js

Trong trình duyệt web, hãy truy cập http: // localhost: 8000 . Bạn sẽ thấy trang này:

Hình ảnh trang HTML được tải từ tệp trong Node.js

Bây giờ bạn đã trả lại một trang HTML từ máy chủ cho người dùng. Bạn có thể thoát khỏi máy chủ đang chạy bằng CTRL + C . Bạn sẽ thấy lời nhắc đầu cuối quay lại khi bạn thực hiện.

Khi viết mã như thế này trong sản xuất, bạn có thể không muốn tải trang HTML mỗi khi nhận được yêu cầu HTTP. Mặc dù trang HTML này có kích thước khoảng 800 byte, nhưng các trang web phức tạp hơn có thể có kích thước hàng megabyte. Các tệp lớn có thể mất một lúc để tải. Nếu trang web của bạn đang mong đợi nhiều lưu lượng truy cập, tốt nhất có thể tải các tệp HTML khi khởi động và lưu nội dung của chúng. Sau khi chúng được tải, bạn có thể thiết lập máy chủ và làm cho nó lắng nghe các yêu cầu trên một địa chỉ.

Để chứng minh phương pháp này, hãy xem cách chúng tôi có thể điều chỉnh lại máy chủ của mình để có thể mở rộng và hiệu quả hơn.

Cung cấp HTML hiệu quả

Thay vì tải HTML cho mọi yêu cầu, trong bước này, chúng tôi sẽ tải nó một lần vào đầu. Yêu cầu sẽ trả về dữ liệu mà chúng tôi đã tải khi khởi động.

Trong terminal, mở lại tập lệnh Node.js bằng trình chỉnh sửa văn bản:

  
  1. nano

    htmlFile.js

Hãy bắt đầu bằng cách thêm một biến mới trước khi chúng ta tạo hàm requestListener () :

first-server / htmlFile.js

  

...

let

indexFile

;

const

requestListener

=

hàm

(

req

,

res

)

{

...

Khi chúng tôi chạy chương trình này, biến này sẽ giữ nội dung của tệp HTML.

Bây giờ, hãy điều chỉnh lại hàm requestListener () . Thay vì tải tệp, bây giờ nó sẽ trả về nội dung của indexFile :

first-server / htmlFile.js

  

...

const

requestListener

=

hàm

(

req

,

res

)

{

res

.

setHeader

(

" Loại nội dung "

,

" văn bản / html "

)

;

res

.

writeHead

(

200

)

;

res

.

end

(

indexFile

)

;

}

;

...

Tiếp theo, chúng tôi chuyển logic đọc tệp từ hàm requestListener () sang khởi động máy chủ của chúng tôi. Thực hiện các thay đổi sau khi chúng tôi tạo máy chủ:

first-server / htmlFile.js

  

...

const

server

=

http

.

createServer

(

requestListener

)

; fs

.

readFile

(

__dirname

+

" / index.html "

)

.

thì

(

nội dung

= & gt;

{

indexFile

=

nội dung

;

máy chủ

.

lắng nghe

(

cổng

,

máy chủ

,

(

)

= & gt;

{

bảng điều khiển

.

nhật ký

(

`

Máy chủ đang chạy trên http: //

$ {

host

}

:

$ {

port

}

`

)

; < / p>

}

)

;

}

)

.

bắt

(

err

= & gt;

{

bảng điều khiển

.

lỗi

(

`

Không thể đọc tệp index.html:

$ {

err

}

`

)

;

quy trình

.

thoát

(

1

)

;

}

)

;

Lưu tệp và thoát khỏi nano bằng CTRL + X .

Mã đọc tệp tương tự như những gì chúng tôi đã viết trong lần thử đầu tiên. Tuy nhiên, khi chúng tôi đọc tệp thành công, giờ đây chúng tôi lưu nội dung vào biến indexFile chung của chúng tôi. Sau đó, chúng tôi khởi động máy chủ bằng phương thức listening () . Điều quan trọng là tệp được tải trước khi máy chủ được chạy. Bằng cách này, hàm requestListener () sẽ chắc chắn trả về một trang HTML, vì indexFile không còn là một biến trống.

Trình xử lý lỗi của chúng tôi cũng đã thay đổi. Nếu không thể tải tệp, chúng tôi sẽ ghi lại lỗi và in tệp đó ra bảng điều khiển của chúng tôi. Sau đó, chúng tôi thoát khỏi chương trình Node.js bằng hàm exit () mà không cần khởi động máy chủ. Bằng cách này, chúng tôi có thể biết lý do tại sao đọc tệp không thành công, giải quyết sự cố và sau đó khởi động lại máy chủ.

Hiện chúng tôi đã tạo các máy chủ web khác nhau trả về nhiều loại dữ liệu khác nhau cho người dùng. Cho đến nay, chúng tôi chưa sử dụng bất kỳ dữ liệu yêu cầu nào để xác định những gì nên được trả lại. Chúng tôi sẽ cần sử dụng dữ liệu yêu cầu khi thiết lập các tuyến hoặc đường dẫn khác nhau trong máy chủ Node.js, vì vậy, tiếp theo hãy xem cách chúng hoạt động cùng nhau.

Bước 4 – Quản lý các tuyến đường bằng cách sử dụng một đối tượng yêu cầu HTTP

Hầu hết các trang web chúng tôi truy cập hoặc các API chúng tôi sử dụng thường có nhiều hơn một điểm cuối để chúng tôi có thể truy cập các tài nguyên khác nhau. Một ví dụ điển hình là hệ thống quản lý sách, một hệ thống có thể được sử dụng trong thư viện. Nó không chỉ cần quản lý dữ liệu sách mà còn quản lý dữ liệu tác giả để tạo danh mục và tìm kiếm thuận tiện.

Mặc dù dữ liệu về sách và tác giả có liên quan với nhau nhưng chúng là hai đối tượng khác nhau. Trong những trường hợp này, các nhà phát triển phần mềm thường viết mã cho từng đối tượng trên các điểm cuối khác nhau như một cách để cho người dùng API biết họ đang tương tác với loại dữ liệu nào.

Hãy tạo một máy chủ mới cho một thư viện nhỏ, máy chủ này sẽ trả về hai loại dữ liệu khác nhau. Nếu người dùng truy cập địa chỉ máy chủ của chúng tôi tại / books , họ sẽ nhận được danh sách sách trong JSON. Nếu họ truy cập / author , họ sẽ nhận được danh sách thông tin tác giả trong JSON.

Cho đến nay, chúng tôi đã trả lại cùng một phản hồi cho mọi yêu cầu mà chúng tôi nhận được. Hãy nhanh chóng minh họa điều này.

Chạy lại ví dụ phản hồi JSON của chúng tôi:

  
  1. node

    json.js

Trong một thiết bị đầu cuối khác, hãy thực hiện yêu cầu cURL như trước:

  
  1. curl

    http: // localhost: 8000

Bạn sẽ thấy:

  

Đầu ra

{"nội dung": "Đây là phản hồi JSON"}

Bây giờ chúng ta hãy thử một lệnh curl khác:

  
  1. curl

    http: // localhost: 8000 / todos

Sau khi nhấn Enter , bạn sẽ thấy kết quả tương tự:

  

Đầu ra

{"nội dung": "Đây là phản hồi JSON"}

Chúng tôi đã không xây dựng bất kỳ logic đặc biệt nào trong hàm requestListener () của chúng tôi để xử lý một yêu cầu có URL chứa / todos , vì vậy Node.js trả về cùng một thông báo JSON bằng cách mặc định.

Vì chúng tôi muốn xây dựng một máy chủ quản lý thư viện thu nhỏ, giờ đây chúng tôi sẽ tách loại dữ liệu được trả về dựa trên điểm cuối mà người dùng truy cập.

Trước tiên, hãy thoát khỏi máy chủ đang chạy bằng CTRL + C .

Bây giờ, hãy mở lines.js trong trình soạn thảo văn bản của bạn:

  
  1. nano

    route.js

Hãy bắt đầu bằng cách lưu trữ dữ liệu JSON của chúng tôi trong các biến trước hàm requestListener () :

first-server / lines.js

  

...

const

books

=

JSON

.

stringify

(

[

{

tiêu đề

:

" Nhà giả kim "

,

tác giả

:

" Paulo Coelho "

,

năm

:

1988

}

,

{

title

:

"Nhà tiên tri"

,

tác giả

:

" Kahlil Gibran "

,

năm

:

1923

}

]

)

;

const

author

=

JSON

.

stringify

(

[

{

tên

:

" Paulo Coelho "

,

countryOfBirth

:

" Braxin "

,

yearOfBirth

:

1947

}

,

{

tên

:

" Kahlil Gibran "

,

countryOfBirth

:

" Li-băng "

,

yearOfBirth

:

1883

}

]

)

;

...

Biến books là một chuỗi chứa JSON cho một mảng các đối tượng sách. Mỗi cuốn sách có tên hoặc tên, tác giả và năm xuất bản.

Biến author là một chuỗi chứa JSON cho một mảng các đối tượng author. Mỗi tác giả có tên, quốc gia sinh và năm sinh của họ.

Bây giờ chúng tôi đã có dữ liệu mà các phản hồi của chúng tôi sẽ trả về, hãy bắt đầu sửa đổi hàm requestListener () để đưa chúng về đúng tuyến

Đầu tiên, chúng tôi sẽ đảm bảo rằng mọi phản hồi từ máy chủ của chúng tôi đều có tiêu đề Content-Type chính xác:

first-server / lines.js

  

...

const

requestListener

=

hàm

(

req

,

res p>

)

{

res

.

setHeader

(

" Loại nội dung "

,

" ứng dụng / json "

)

;

}

...

Bây giờ, chúng tôi muốn trả lại JSON phù hợp tùy thuộc vào đường dẫn URL mà người dùng truy cập. Hãy tạo câu lệnh switch trên URL của yêu cầu:

first-server / lines.js

  

...

const

requestListener

=

hàm

(

req

,

res p>

)

{

res

.

setHeader

(

" Loại nội dung "

,

" ứng dụng / json "

)

;

chuyển đổi

(

req

.

url

)

{

}

}

...

Để lấy đường dẫn URL từ đối tượng yêu cầu, chúng tôi cần truy cập thuộc tính url của nó. Bây giờ chúng ta có thể thêm các trường hợp vào công tắc câu lệnh để trả về JSON thích hợp.

Câu lệnh switch của JavaScript cung cấp một cách để kiểm soát mã nào được chạy tùy thuộc vào giá trị của một đối tượng hoặc biểu thức JavaScript (ví dụ: kết quả của các phép toán). Nếu bạn cần một bài học hoặc lời nhắc về cách sử dụng chúng, hãy xem hướng dẫn của chúng tôi về Cách sử dụng Câu lệnh chuyển đổi trong JavaScript .

Hãy tiếp tục bằng cách thêm case khi người dùng muốn nhận danh sách sách của chúng tôi:

first-server / lines.js

  

...

const

requestListener

=

hàm

(

req

,

res

)

{

res

.

setHeader

(

" Loại nội dung "

,

" ứng dụng / json "

)

;

chuyển đổi

(

req

.

url

)

{

case

"/ books"

:

res

.

writeHead

(

200

)

;

res

.

kết thúc

(

sách

)

;

break

}

}

...

Chúng tôi đặt mã trạng thái của mình thành 200 để cho biết yêu cầu là ổn và trả lại JSON chứa danh sách sách của chúng tôi. Bây giờ chúng ta hãy thêm một case khác cho các tác giả của chúng ta:

first-server / lines.js

  

...

const

requestListener

=

hàm

(

req

,

res

)

{

res

.

setHeader

(

" Loại nội dung "

,

" ứng dụng / json "

)

;

chuyển đổi

(

req

.

url

)

{

case

"/ books"

:

res

.

writeHead

(

200

)

;

res

.

kết thúc

(

sách

)

;

break

case

"/ tác giả"

:

res

.

writeHead

(

200

)

;

res

.

kết thúc

(

các tác giả

)

;

break

}

}

...

Giống như trước đây, mã trạng thái sẽ là 200 vì yêu cầu vẫn ổn. Lần này, chúng tôi trả lại JSON chứa danh sách các tác giả của chúng tôi.

Chúng tôi muốn trả lại lỗi nếu người dùng cố gắng đi đến bất kỳ đường dẫn nào khác. Hãy thêm trường hợp mặc định để thực hiện việc này:

route.js

 

...

const

requestListener

=

hàm

(

req

,

res

)

{

res

.

setHeader

(

" Loại nội dung "

,

" ứng dụng / json "

)

;

chuyển đổi

(

req

.

url

)

{

case

"/ books"

:

res

.

writeHead

(

200

)

;

res

.

kết thúc

(

sách

)

;

break

case

"/ tác giả"

:

res

.

writeHead

(

200

)

;

res

.

kết thúc

(

các tác giả

)

;

break

mặc định

:

res

.

writeHead

(

404

)

;

res

.

kết thúc

(

JSON

.

stringify

(

< p class = "dấu chấm câu mã thông báo"> {

lỗi

:

" Không tìm thấy tài nguyên "

}

)

)

;

}

}

...

Chúng tôi sử dụng từ khóa default trong câu lệnh switch để nắm bắt tất cả các trường hợp khác mà các trường hợp trước đây của chúng tôi không nắm bắt được. Chúng tôi đặt mã trạng thái thành 404 để cho biết rằng không tìm thấy URL mà họ đang tìm kiếm. Sau đó, chúng tôi đặt một đối tượng JSON có chứa thông báo lỗi.

Hãy kiểm tra máy chủ của chúng tôi để xem nó có hoạt động như chúng tôi mong đợi hay không. Trong một thiết bị đầu cuối khác, trước tiên hãy chạy một lệnh để xem liệu chúng ta có lấy lại danh sách sách của mình hay không:

  
  1. curl

    http: // localhost: 8000 / books

Nhấn Enter để xem kết quả sau:

  

Đầu ra

[{"title": "Nhà giả kim", "tác giả": "Paulo Coelho", "năm ": 1988}, {" title ":" Nhà tiên tri "," tác giả ":" Kahlil Gibran "," năm ": 1923}]

Cho đến nay, rất tốt. Hãy thử tương tự cho / author . Nhập lệnh sau vào terminal:

  
  1. curl

    http: // localhost: 8000 / author

Bạn sẽ thấy kết quả sau khi lệnh hoàn tất:

  

Đầu ra

[{"name": "Paulo Coelho", "countryOfBirth": "Brazil", "yearOfBirth" : 1947}, {"name": "Kahlil Gibran", "countryOfBirth": "Lebanon", "yearOfBirth": 1883}]

Cuối cùng, hãy thử một URL không chính xác để đảm bảo rằng requestListener () trả về phản hồi lỗi:

  
  1. curl

    http: // localhost: 8000 / notreal

Nhập lệnh đó sẽ hiển thị thông báo sau:

  

Đầu ra

{"error": "Không tìm thấy tài nguyên"}

Bạn có thể thoát khỏi máy chủ đang chạy bằng CTRL + C .

Giờ đây, chúng tôi đã tạo ra các con đường khác nhau để người dùng có được các dữ liệu khác nhau. Chúng tôi cũng đã thêm phản hồi mặc định trả về lỗi HTTP nếu người dùng nhập URL mà chúng tôi không hỗ trợ.

Kết luận

Trong hướng dẫn này, bạn đã tạo một loạt máy chủ HTTP Node.js. Trước tiên, bạn đã trả lại một phản hồi dạng văn bản cơ bản. Sau đó, bạn tiếp tục trả về nhiều loại dữ liệu khác nhau từ máy chủ của chúng tôi: JSON, CSV và HTML. Từ đó, bạn có thể kết hợp tải tệp với phản hồi HTTP để trả lại trang HTML từ máy chủ cho người dùng và tạo một API sử dụng thông tin về yêu cầu của người dùng để xác định dữ liệu nào sẽ được gửi trong phản hồi của nó.

Giờ đây, bạn đã được trang bị để tạo các máy chủ web có thể xử lý nhiều yêu cầu và phản hồi khác nhau. Với kiến ​​thức này, bạn có thể tạo một máy chủ trả về nhiều trang HTML cho người dùng tại các điểm cuối khác nhau. Bạn cũng có thể tạo API của riêng mình.

Để tìm hiểu thêm về các máy chủ web HTTP trong Node.js, bạn có thể đọc tài liệu Node.js trên mô-đun http . Nếu muốn tiếp tục tìm hiểu Node.js, bạn có thể quay lại trang Cách viết mã trong chuỗi Node.js .


Xem thêm những thông tin liên quan đến chủ đề nút js http server ví dụ

Your First Node.js Web Server

alt

  • Tác giả: Web Dev Simplified
  • Ngày đăng: 2018-12-06
  • Đánh giá: 4 ⭐ ( 2722 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: In this video I am going to walk you through all the steps necessary to create your very first Node.js web server. We will start at the very beginning with installing Node.js, and end with a fully functioning basic web server that serves HTML documents.

    Download Node.js:
    https://nodejs.org/en/

    More Node.js Tutorials:
    https://www.youtube.com/watch?v=VShtPwEkDD0&list=PLZlA0Gpn_vH_uZs4vJMIhcinABSTUH2bY

    Twitter:
    https://twitter.com/DevSimplified

    GitHub:
    https://github.com/WebDevSimplified

    CodePen:
    https://codepen.io/WebDevSimplified

    Nodejs WebDevelopment WebServer

JavaScript: onSubmit

  • Tác giả: v1study.com
  • Đánh giá: 5 ⭐ ( 4103 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Sự kiện onSubmit là một thuộc tính chỉ duy nhất có ở thẻ
    , nó được kích hoạt chỉ khi người dùng submit form dữ liệu. Lập trình viên thường dựa trên

Khởi tạo server Node.js với HTTP module

  • Tác giả: toidicode.com
  • Đánh giá: 5 ⭐ ( 5652 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Ở các bài trước chúng ta đã được học cơ bản qua về nodejs rồi, nhưng đó mới chỉ là trên cmd, chắc hẳn các bạn cũng cảm thấy chán lắm rồi đúng không? Bài này chúng ta sẽ tìm hiểu và khởi tạo một con server bằng nodejs trên máy của chúng ta.

Tổng quan về Node JS

  • Tác giả: viblo.asia
  • Đánh giá: 4 ⭐ ( 8439 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: 1. NodeJS là gì? NodeJS là một mã nguồn được xây dựng dựa trên nền tảng Javascript V8 Engine, nó được sử dụng để xây dựng các ứng dụng web như các trang video clip, các forum và đặc biệt là trang mạng…

Javascript

  • Tác giả: hiepsiit.net
  • Đánh giá: 4 ⭐ ( 1693 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Ví dụ về chuyển đổi hình tự động với Javascript

  • Tác giả: expressmagazine.net
  • Đánh giá: 3 ⭐ ( 2435 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Sau một số bài viết giới thiệu về DOM có lẽ cũng nên làm một vài ví dụ cho hứng khởi chứ cứ lý thuyết hoài cũng ngán, nhưng có lý thuyết thì mới có thực hành và lý thuyết vững thì thực hành mới thành công.

XMLHttpRequest – Tạo HTTP request đến server trong JavaScript

  • Tác giả: completejavascript.com
  • Đánh giá: 3 ⭐ ( 5636 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: XMLHttpRequest giúp bạn gửi HTTP request (GET, POST, PUT, DELETE,…) đến server và hỗ trợ hai kiểu request: đồng bộ và bất đồng bộ.

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Cách tạo một thanh điều hướng đơn giản với HTML và CSS - đặt navbar ở đâu trong html

By ads_php