Hướng dẫn node js html - nút js html
Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách thức để thực hiện thao tác đọc một tệp dữ liệu và gửi trả tới trình duyệt web khi nhận được yêu cầu truy cập tới địa chỉ 5 mà chúng ta đã khởi tạo trong bài trước. Các tác vụ làm việc với các thư mục và các tệp dữ liệu được NodeJS hỗ trợ bằng cách cung cấp cho người viết code một 6 chuyên dụng. Hãy cùng tìm hiểu về công cụ này. Show Sử dụng một + File system + Promise example + Callback example + Synchronous example + Promises API + Callback API + Synchronous API 6 của NodeJSMột 6 trong NodeJS thường được đóng gói trong một 9 đại diện, và chúng ta có thể truy xuất 9 này bằng cách sử dụng hàm 1 giống như ở dòng code đầu tiên trong đoạn code 5 ví dụ ở bài trước.
Bên cạnh đó thì bạn cũng có thể sử dụng cú pháp 3 của JavaScript để yêu cầu một 6 hay một thành phần của 6 cần sử dụng. Tuy nhiên thì để sử dụng cú pháp 3 mặc định của JavaScript, chúng ta sẽ cần thực hiện một vài thao tác thiết lập và không hẳn là cần thiết lắm ở thời điểm hiện tại. Do đó mình và bạn sẽ tiếp tục học và sử dụng 7 và 8 của NodeJS thêm một thời gian cho đến khi... một vài bài viết nữa. Trong code ví dụ mở đầu thì 6 mà chúng ta đã sử dụng có tên là 0. Đây là 6 được thiết kế để cung cấp các công cụ làm việc với giao thức 2 - được hiểu nôm na là giao thức truyền tải nội dung siêu văn bản; Trong đó thì cụm từ 3 hay 4 ở đây là để chỉ các văn bản 5.Nghe rườm rà thật đấy. Nhưng mà chúng ta chỉ cần hiểu tổng quan thôi chứ việc ghi nhớ mấy cái tên đầy đủ của mấy thuật ngữ này cũng không quan trọng lắm đâu. Các 6 được môi trường NodeJS cung cấp mặc định đều được lập tài liệu tại trang chủ của NodeJS ở đây - Tài liệu về các 6 của NodeJS.Tài liệu về các 6 của NodeJS.Và trong code ví dụ trước đó, hàm 7 đã được sử dụng để yêu cầu 0 ở thư viện mặc định của môi trường NodeJS. Chúng ta cũng có thể cài đặt thêm các 6 được chia sẻ qua lại giữa cộng đồng lập trình viên giống như việc sử dụng các 1 và 2 ở phía 3. Tuy nhiên đây cũng sẽ là câu chuyện mà chúng ta nên để dành thêm một vài bài viết nữa. Làm quen với cấu trúc tài liệu của NodeJSTrong trang tài liệu này thì bạn có thể thấy một thanh điều hướng chính ở phía bên trái là danh sách của tất cả các 6 được cung cấp bởi 5. Mỗi một 6 sẽ thực hiện một nhóm tác vụ nhất định xoay quanh tên gọi của 6 đó. Chúng ta đang cần tìm cách để mở và xem nội dung của một tệp, nên từ khóa phù hợp nhất trong danh sách các 6 mà chúng ta đang thấy ở đây là 9 - Tài liệu về 0.Tài liệu về 0.Trong trang tài liệu về một 6 bất kỳ của NodeJS, cấu trúc nội dung chung chung sẽ là một cái danh sách các chỉ mục nội dung 2 của trang đó rất rất dài. Và ở bên dưới là các đoạn viết nội dung chi tiết cho các chỉ mục đã được liệt kê cực kỳ cực kỳ dài. Tuy nhiên thì điều quan trọng nhất là chúng ta chỉ cần hiểu được cấu trúc tổng quan của cái 2 là sẽ ổn thôi. Thông thường thì mỗi 6 sẽ có các 5 nhỏ hơn và được đóng gói thành một vài 9 đại diện. Và mỗi 5 sẽ được dành luôn cho một phần ví dụ đại biểu ở ngay phần đầu tiên của trang tài liệu, chỉ đứng sau cái 2. Do đó khi bạn nhìn vào danh sách các chỉ mục thì sẽ thấy đầu tiên là tên 6, rồi rẽ nhánh tới các chỉ mục cấp gần nhất là các ví dụ 0 đại biểu cho các 5 và các chỉ mục tài liệu chi tiết 2 của các 5; Và cái 2 của chúng ta ở đây đang có dạng tổng quan thế này -
Về việc tại sao NodeJS họ không làm các 5 có thể 6 cho các chỉ mục 2 thì mình không rõ. Nhưng đúng là nếu cứ để một danh sách các chỉ mục nội dung rất rất dài như vậy luôn được hiển thị đầy đủ, thì mặc dù nội dung đã được phân cấp rất tuyệt vời cũng vẫn sẽ rất khó cho người đọc có thể theo dõi nếu như không dành thời gian ra để tổng quát lại cái 2. 😅Sau khi đã nhìn qua những cái tên 5 là 0, 1, và 2, chúng ta có thể hiểu lơ mơ là các tác vụ làm việc với các thư mục và các tệp được thực hiện bởi 3 có thể được thực thi đồng bộ với sự hỗ trợ của 4, hoặc được thực thi bất đồng bộ với sự hỗ trợ của 5 và 6. Bởi vì các khái niệm này thì chúng ta đều đã được gặp trong Sub-Series JavaScript rồi. Sub-Series JavaScript rồi. Tuy nhiên thì mình nghĩ là chúng ta vẫn nên ngó qua mấy cái ví dụ 0 đại biểu của các 5 xem nhỡ như có hiểu lầm gì không. Với lại tiện thể thì đọc qua phần mở đầu giới thiệu về 6 tổng 3 xem có lưu ý gì quan trọng trước khi sử dụng không.
Ở đây chúng ta có hướng dẫn cơ bản cách yêu cầu một 6 để sử dụng trong tệp JavaScript mà chúng ta đang làm việc. Dạng cú pháp 2 đang được hiển thị là 3 - cú pháp mặc định của JavaScript. Còn nếu bạn click vào cái công tắc chuyển đổi 4 ở phía bên phải thì sẽ thấy code ví dụ trong khung hiển thị đó thay đổi sang cú pháp 5 và sử dụng hàm 7 như chúng ta đã dùng trong ví dụ trước đó.
Tiếp tục xem các ví dụ đại biểu cho các 5 ở phía dưới, chúng ta thử so sánh code ví dụ của 2 và 1 một chút.
Đều là code để thực hiện một tác vụ nào đó, đang sử dụng tới các hàm có từ khóa chung là 0 của 9, có dòng code in thông báo là xóa thành công một tệp 2 nào đó. Đúng như cách thức mà chúng ta sử dụng các hàm xử lý bình thường 2, và các hàm bất đồng bộ 4 kèm theo 1. Vậy là không có nhầm lẫn gì rồi. Bây giờ chúng ta cần đặt một chút suy nghĩ cho tác vụ đọc nội dung của một tệp để chọn ra một trong số các 5 của 3 và xử lý tác vụ. Rõ ràng là để đọc nội dung của một tệp bất kỳ thì chắc chắn tác vụ này sẽ tạo ra một quãng thời gian trễ cho tiến trình vận hành chung của hệ thống. Do đó 4 có lẽ là lựa chọn chỉ dành cho một số ít trường hợp khi chúng ta thực sự không thể làm khác được. Giải pháp đầu tiên mà chúng ta nên ưu tiên sử dụng sẽ luôn là các phương thức xử lý được thực thi bất đồng bộ 4 được cung cấp bởi 5 và 6.Đằng nào thì cũng tiện một công mở trình soạn thảo code lên để học NodeJS, chúng ta sẽ thử cả 2 nhóm API này và xem cách viết nào phù hợp với phong cách tư duy logic của mình nhất, hoặc là kiểu định dạng code nào mà mình nhìn thấy vừa mắt nhất. Sử dụng Callback APIThao tác chúng ta đang cần xử lý là 02 nội dung của một tệp, và từ khóa tương ứng sau khi 03 qua tiếng Anh thì nó là 04. Và trong danh sách chỉ mục con của 5 thì chúng ta có một số cái 04 như thế này -
Rồi... may quá là có cái 07 đúng luôn với nhu cầu cần xử lý. Chắc tới 99.99% là cái mà chúng ta cần tìm rồi, di chuyển tới phần nội dung đó ngay. Đầu tiên thì chúng ta thấy có cú pháp tổng quan của 07 với các tham số đầu vào là -
Sau đó thì chúng ta nhìn thấy code ví dụ để đọc một tệp có đường dẫn thư mục là 16. Ở đây chúng ta thay cú pháp 2 bằng 18 như đã nói nhé.
Mọi thứ trông khá gọn gàng và dễ hiểu. Hàm 19 sẽ thực hiện thao tác đọc nội dung của tệp 16 bằng một logic xử lý nào đó mà chúng ta không cần quan tâm tới. Tuy nhiên sau khi thực hiện xong thao tác đọc nội dung của tệp đó thì 19 sẽ gọi hàm 1 được truyền vào, để bàn giao kết quả hoạt động.Lúc này công việc tiếp theo được định nghĩa trong hàm 1 để xử lý kết quả nhận được. Nếu có một 24 được trả về thì sẽ throw luôn 9 mô tả ngoại lệ đó. Trong trường hợp không có 24 được trả về thì có nghĩa là thao tác đọc nội dung của 19 đã thành công và có dữ liệu được trả vào tham số 28 để in ra 29.Bây giờ chúng ta hãy 30 và chạy thử code này xem sao. Đầu tiên chúng ta sẽ cần chuẩn bị một tệp 31 để làm đối tượng mà hàm 19 sẽ tìm đến đọc nội dung. Về đường dẫn thư mục thì chúng ta sẽ bắt đầu quy ước từ bây giờ để làm điểm khởi đầu cho các bài viết tiếp theo nữa. Chúng ta sẽ có một thư mục tổng là 33 với cấu trúc các thư mục con và các tệp bên trong khởi đầu như thế này - Đầu tiên chúng ta sẽ cần chuẩn bị một tệp 31 để làm đối tượng mà hàm 19 sẽ tìm đến đọc nội dung. Về đường dẫn thư mục thì chúng ta sẽ bắt đầu quy ước từ bây giờ để làm điểm khởi đầu cho các bài viết tiếp theo
nữa. Chúng ta sẽ có một thư mục tổng là 33 với cấu trúc các thư mục con và các tệp bên trong khởi đầu như thế này -
Chúng ta sẽ khởi đầu với tệp 31 có nội dung đơn giản thôi, một cái tiêu đề là được.
Bây giờ trong tệp 35 chúng ta sẽ 30 code của 37 trong ví dụ ở bài trước, đồng thời 30 cả code ví dụ của 07 trong tài liệu của NodeJS và chỉnh sửa lại một chút để đọc và gửi nội dung của tệp 31 ở dạng phản hồi khi 5 nhận được yêu cầu. Lúc này, các thao tác phản hồi lại yêu cầu 42 sẽ được di chuyển vào bên trong định nghĩa hàm 1 của 19 để có thể sử dụng được biến 28.
Bây giờ thì chúng ta mở cửa sổ dòng lệnh và khởi động 5 thôi. 0Nhưng lần này là chúng ta sẽ chạy tệp 35 nhé. 1 2http://127.0.0.1:3000/ Ồ... vậy là thao tác đọc dữ liệu của hàm 19 đã hoạt động tốt, toàn bộ nội dung của tệp 31 đã được gửi cho trình duyệt web khi 5 nhận được yêu cầu. Nhưng chúng ta không muốn hiển thị code cho người dùng xem như vậy, họ chỉ cần đọc thông tin thôi mà. Sau một hồi lay hoay thì mình cũng tìm ra nguyên nhân và phương án xử lý. Đó là ở câu lệnh 51 thứ 2 có nói về kiểu nội dung gửi trả 52 và đang được thiết lập để thông báo cho trình duyệt web là 53 - có nghĩa là 54. Chắc đây là lý do trình duyệt web nhận được bao nhiêu chữ nghĩa là cứ cho hiện đầy đủ hết lên để người dùng xem luôn; Không cả cần ngó qua xem nội dung đó là cái gì. Chứ nếu trình duyệt web mà biết là code HTML thì chắc chắn là sẽ xử lý khác. Bây giờ chúng ta hãy thử thay đổi chỗ 53 thành 56 xem sao. Bạn lưu ý là phần mềm 5 của chúng ta sẽ được lưu vào bộ nhớ đệm của máy tính để vận hành, và những thay đổi trong code mà chúng ta tạo ra sẽ không có hiệu lực cho đến khi phần mềm 5 được khởi động lại. Bây giờ chúng ta cần thao tác nhấn tổ hợp phím 59 để cửa sổ dòng lệnh dừng 5 lại, và chạy lại lệnh 61 để phần mềm khởi động lại với code mới.Tuyệt... như vậy là trình duyệt web đã nhận được thông báo rằng 62 và chỉ hiển thị nội dung của thẻ tiêu đề 63. Như vậy là vấn đề nằm ở hàm xử lý yêu cầu và phản hồi, và chúng ta chưa thể tìm hiểu thêm về những thứ liên quan vào lúc này. Ít nhất thì chúng ta đã biết là hàm 19 đã hoạt động hoàn toàn ổn với 1 mà chúng ta truyền vào. Bây giờ chúng ta sẽ thử thao tác đọc tệp 31 với sự hỗ trợ của 6. Sử dụng Promises APITương ứng với phương thức 07 của 5 thì ở đây chúng ta có 70. Thay vì truyền vào một 1 để tiếp nhận kết quả của thao tác đọc tệp như phần trước thì chúng ta sẽ chỉ truyền vào đường dẫn thư mục của tệp cần đọc và nhận được một object Promise hứa hẹn là sẽ trả lời kết quả của thao tác đọc sớm nhất có thể. Nếu đọc được nội dung của tệp thì sẽ 72 nội dung cho chúng ta 73 một thao tác xử lý tiếp theo; Còn nếu có lỗi phát sinh thì sẽ 74 cho chúng ta 75 một thao tác xử lý ngoại lệ.object Promise hứa hẹn là sẽ trả lời kết quả của thao tác đọc sớm nhất có thể. Nếu đọc được nội dung của tệp thì sẽ 72 nội dung cho chúng ta 73 một thao tác xử lý tiếp theo; Còn nếu có lỗi phát sinh thì sẽ 74 cho chúng ta 75 một thao
tác xử lý ngoại lệ. 3Sau khi chỉnh sửa lại hàm 76 của 5 để yêu cầu hàm 19 của 6 thì chúng ta đã có thể gọi hàm và chuyển các thao tác xử lý 28 và 12 vào hai phương thức 73 và 75 nối tiếp. Khởi động lại 5 và kiểm tra kết quả hoạt động thôi. Mình đoán là bạn cũng thấy kết quả hoạt động không có gì khác biệt. Mọi thứ đều rất ổn giống như khi sử dụng 5. Như vậy là NodeJS không chỉ cung cấp cho chúng ta một lựa chọn duy nhất cho mỗi tác vụ cần thực hiện, mà thay vào đó thì chúng ta còn có những lựa chọn thay thế. Hãy cùng lưu ý điểm quan trọng này, bởi vì chúng ta sẽ có thể tự tin hơn khi cần phải đưa ra giải pháp mà bản thân cảm thấy phù hợp. Sẽ luôn có nhiều hơn một phương án xử lý tốt cho một tác vụ cần thực hiện. Vấn đề về đường dẫn thư mụcTrong code ví dụ ở phía trên chúng ta đã phải 86 một dòng code tạo đường dẫn thư mục để có thể đọc được tệp trên 87 hoặc 88 do cách biểu thị đường dẫn thư mục của các hệ điều hành có phần khác nhau một chút. Để khắc phục vấn đề này, NodeJS có cung cấp cho chúng ta một 6 hỗ trợ có tên là 09. 4Trong code ví dụ ở phía trên, phương thức 91 sẽ giúp chúng ta ghép nối tên của tất cả các thư mục được truyền vào theo thứ tự, và tạo ra một đường dẫn phù hợp với hệ điều hành đang chạy 5. Trong đó biến 93 là một biến toàn cục, có thể được sử dụng ở bất kỳ đâu trong 94; Biến này lưu trữ địa chỉ đường dẫn tính từ thư mục gốc của ổ cứng đang chứa thư mục 33 tới thư mục đang chứa tệp 96 đang sử dụng biến này.Kết thúc bài viếtSau khi chắc chắn là đã có thể tự tin đọc nội dung của một tệp với sự hỗ trợ của 9 rồi thì chúng ta bắt đầu đi tới những câu hỏi tiếp theo. Ở đây chúng ta đang truyền vào hàm đọc tệp một đường dẫn tĩnh 98. Nếu bây giờ chúng ta gõ vào thanh địa chỉ của trình duyệt web để yêu cầu tải một tệp khác, ví dụ 99, để đọc một bài viết thì kết quả trả về hiển nhiên vẫn đang là nội dung của trang chủ 31.Như vậy thì điều quan trọng cần làm tiếp theo đó là chúng ta cần phải tìm hiểu cách xem nội dung yêu cầu 01 và phân loại xử lý để hàm 76 có thể tìm và trả về tệp tương ứng với yêu cầu nhận được. Và đó sẽ là chủ đề của chúng ta trong bài sau. Bây giờ thì chúng ta nên nghỉ giải lao một chút đã. Hẹn gặp lại bạn trong bài viết tiếp theo. 03Nhân tiện thì bài viết này của chúng ta nhằm mục đích giới thiệu 04 và làm quen với cấu trúc tài liệu hướng dẫn của NodeJS. Do đó bạn có thể tự tra cứu và luyện tập các phương thức để tạo tệp mới và ghi nội dung vào đó, hay xóa một tệp nào đó. Như vậy chắc chắn là bạn sẽ sớm cảm thấy quen thuộc với cách lập tài liệu của NodeJS và chúng ta sẽ có thể tự tin hơn để lướt qua các 6 khi cần sử dụng tới một tính năng nào đó do trong thư viện mặc định. Thêm vào đó là mình quên chưa nói về tệp 37 và 35. Về cơ bản thì chúng ta sẽ viết và sửa code trong tệp 35 để chạy thử. Còn tệp 37 là để bạn chọn ra code mà bạn muốn sử dụng để cập nhật dần đần khi cảm thấy đã chắc chắn logic vận hành của một đoạn code mới nào đó. Bởi vì chúng ta vừa học kiến thức mới và vừa cập nhật nên mình muốn tránh tình huống viết đè ngay code mới thay cho code cũ và ảnh hưởng đến cột mốc logic vận hành cũ, thời điểm mà bạn đang hiểu được chắc chắn tính năng và giới hạn của code đó.[NodeJS] Bài 4 - Xử Lý Yêu Cầu Web Tĩnh |