Khi chúng ta muốn lưu trữ một đối tượng JavaScript thành một chuỗi JSON, chúng ta sử dụng hàm JSON.stringify(). Hàm này sẽ chuyển đổi đối tượng thành một chuỗi JSON. Ví dụ, trong đoạn mã trên, JSON.stringify(obj) sẽ chuyển đổi đối tượng obj thành một chuỗi JSON. Điều này được thực hiện bởi hàm JSON.stringify(), vì vậy nó chịu trách nhiệm cho quá trình serial hóa. Sau đó, chúng ta sử dụng hàm JSON.parse() để chuyển đổi chuỗi JSON trở lại thành một đối tượng JavaScript. Điều này được thực hiện bởi hàm JSON.parse(), vì vậy nó chịu trách nhiệm cho quá trình giải mã. Các câu lệnh console.log() chỉ đơn giản là in ra kết quả, chúng không chịu trách nhiệm cho quá trình serial hóa hay giải mã.
Server-Side development with NodeJS, Express, and MongoDB
Chủ đề học tập
SDN302 Chương 1 - Node.js căn bản: kiến trúc và bất đồng bộ
Chương 1 môn SDN302 dựng nền tảng Node.js: bản chất runtime cho phép JavaScript chạy phía máy chủ, đặc trưng đơn luồng nhưng khả năng mở rộng cao nhờ vòng lặp sự kiện (event loop) và I/O bất đồng bộ không chặn, mô hình hướng sự kiện với EventEmitter, cơ chế module và npm, làm việc với hệ thống tệp qua fs.readFile và stream, cùng ba cách xử lý bất đồng bộ là callback, Promise với ba trạng thái pending - fulfilled - rejected, và async/await kèm try/catch. Trọn bộ câu hỏi trắc nghiệm có đáp án và giải thích.
SDN302 Chương 10 - Backend as a Service và triển khai ứng dụng
Chương 10 môn SDN302 khép lại phần vận hành: mô hình Backend as a Service giúp nhóm nhỏ thiếu năng lực DevOps nhanh chóng có hạ tầng phía máy chủ, các dịch vụ Firebase gồm Firebase Auth cho xác thực người dùng, Firestore, Firebase Storage và Firebase Cloud Messaging cho thông báo đẩy, so sánh BaaS với tự dựng máy chủ, hosting trang tĩnh bằng GitHub Pages, cùng triển khai ứng dụng máy chủ lên Heroku với tính năng tự động deploy mỗi khi đẩy mã lên GitHub. Trọn bộ câu hỏi trắc nghiệm có đáp án và giải thích.
SDN302 Chương 11 - Framework NestJS và Hono
Chương 11 môn SDN302 mở rộng sang hai framework hiện đại của hệ sinh thái Node.js: NestJS với kiến trúc mô-đun và nền TypeScript, hệ thống decorator gồm Controller, Get và Injectable, khái niệm module, cơ chế tiêm phụ thuộc (Dependency Injection) cùng lệnh CLI sinh service; và Hono, framework siêu nhẹ hướng môi trường Edge. So sánh điểm khác biệt cốt lõi giữa NestJS và Express.js. Trọn bộ câu hỏi trắc nghiệm có đáp án và giải thích.
SDN302 Chương 2 - API và giao thức HTTP
Chương 2 môn SDN302 làm rõ API và giao thức HTTP: API là gì và khác SDK ra sao, API Gateway so với load balancer, vòng đời request - response, các phương thức HTTP và tính idempotent, mã trạng thái thông dụng như 201 Created, 301 Moved Permanently và 401 Unauthorized, tham số truy vấn trên URL dùng để lọc và sắp xếp, header gửi dữ liệu JSON, dựng máy chủ HTTP bằng module http của Node, cùng khái niệm serialization với JSON.stringify và JSON.parse. Trọn bộ câu hỏi trắc nghiệm có đáp án và giải thích.
SDN302 Chương 3 - Express.js và Middleware
Chương 3 môn SDN302 đi vào Express.js: framework web tối giản và không áp đặt cho Node.js, định tuyến với app.get và app.post, đối tượng res cùng res.send và res.json, middleware và thứ tự thực thi đúng theo trình tự khai báo trong mã, các middleware thông dụng như express.json để phân tích body JSON, express.static để phục vụ tệp tĩnh, morgan để ghi log request và express-rate-limit, cơ chế bắt lỗi trong route handler, cùng công cụ Express Generator sinh sẵn cấu trúc thư mục routes và views. Trọn bộ câu hỏi trắc nghiệm có đáp án và giải thích.
SDN302 Chương 4 - Cơ sở dữ liệu NoSQL với MongoDB
Chương 4 môn SDN302 trình bày cơ sở dữ liệu NoSQL với MongoDB: đặc điểm lưu trữ tài liệu linh hoạt dạng JSON, khái niệm collection tương ứng bảng trong SQL, schema mềm dẻo phù hợp dữ liệu thay đổi nhanh, cổng mặc định 27017, ObjectId tự sinh cho trường _id, các thao tác CRUD với insertOne, find, updateOne và deleteMany, truy vấn regex và toán tử , giới hạn 16 MB mỗi tài liệu cùng cách tối ưu mô hình dữ liệu, kết nối bằng MongoClient và pipeline tổng hợp. Trọn bộ câu hỏi trắc nghiệm có đáp án và giải thích.
SDN302 Chương 5 - Mongoose ODM và Population
Chương 5 môn SDN302 tập trung vào Mongoose ODM: công cụ mô hình hoá đối tượng cho MongoDB, định nghĩa Schema và các kiểu dữ liệu hợp lệ, Model là đối tượng áp schema lên từng tài liệu trong collection, tạo tài liệu bằng new Model().save(), ràng buộc kiểm tra dữ liệu như required và min, tuỳ chọn timestamps, tham chiếu bằng Schema.Types.ObjectId kèm khoá ref, và cơ chế population thay thế đường dẫn tham chiếu bằng tài liệu thật từ collection khác qua phương thức populate() với các tuỳ chọn path, select và match. Trọn bộ câu hỏi trắc nghiệm có đáp án và giải thích.
SDN302 Chương 6 - Xây dựng REST API với Express, MongoDB và Mongoose
Chương 6 môn SDN302 hướng dẫn xây dựng REST API hoàn chỉnh với Express, MongoDB và Mongoose: các ràng buộc và lợi ích của kiến trúc RESTful, ánh xạ phương thức HTTP vào thao tác tài nguyên với POST để tạo, GET để đọc, PUT để thay thế toàn phần và PATCH để cập nhật một phần, DELETE để xoá, JSON là định dạng trao đổi dữ liệu ưu tiên, thiết kế route và trả mã trạng thái đúng ngữ nghĩa, mô hình Model - View - Controller, cùng công cụ Postman để kiểm thử API. Trọn bộ câu hỏi trắc nghiệm có đáp án và giải thích.
SDN302 Chương 7 - Template engine EJS và Handlebars
Chương 7 môn SDN302 giới thiệu hai bộ máy tạo khuôn mẫu chạy phía máy chủ: EJS với cú pháp nhúng JavaScript qua thẻ <%= %> và phần mở rộng tệp .ejs, cách truyền dữ liệu từ res.render sang khuôn mẫu để kết xuất nội dung động, tái sử dụng phần đầu trang và chân trang chung; cùng Handlebars với cú pháp hai ngoặc nhọn và partials cho phép tách các mảnh giao diện dùng lại được. Trọn bộ câu hỏi trắc nghiệm có đáp án và giải thích.
SDN302 Chương 8 - Xác thực người dùng và bảo mật
Chương 8 môn SDN302 bàn về xác thực người dùng và bảo mật: phân biệt xác thực với phân quyền, phân quyền theo vai trò, băm mật khẩu bằng bcrypt cùng vai trò của salt, mã hoá cơ sở dữ liệu, session và cookie trong Express với req.session và middleware cookie-parser, thư viện Passport.js cùng hàm serializeUser, xác thực dựa trên token với JSON Web Token và gói jsonwebtoken, phân biệt Passport.js với JWT, mã trạng thái 401 Unauthorized, tấn công CSRF, Single Sign-On và chống dò mật khẩu bằng express-rate-limit. Trọn bộ câu hỏi trắc nghiệm có đáp án và giải thích.
SDN302 Chương 9 - HTTPS, upload/download file, CORS và OAuth
Chương 9 môn SDN302 gom các chủ đề truyền thông an toàn và trao đổi tệp: giao thức HTTPS cùng ý nghĩa HyperText Transfer Protocol Secure, cổng mặc định 443, chứng chỉ SSL và quy trình tạo yêu cầu ký chứng chỉ CSR, tải tệp lên máy chủ Express bằng module Multer với upload.single, upload.array và upload.fields, chia sẻ tài nguyên giữa các nguồn gốc khác nhau qua CORS gồm header Access-Control-Allow-Origin và request preflight, cùng khung OAuth 2.0 với vai trò Authorization Server và cơ chế refresh token. Trọn bộ câu hỏi trắc nghiệm có đáp án và giải thích.
Đề thi trắc nghiệm
Xem tất cảSDN302
Server-Side development with NodeJS, Express, and MongoDB
Đề thi SDN302 SP26 B5FE - 49 câu có đáp án
SDN302
Server-Side development with NodeJS, Express, and MongoDB
Đề thi lại SDN302 SP26 RE - 50 câu có đáp án
Bắt đầu một phiên học theo môn
Tiến độ của bạn sẽ luôn được tính toán và đồng bộ trực tiếp theo tổng số lượng câu hỏi mới nhất của môn học này.
Bạn cần đăng nhập để bắt đầu học từ ngân hàng câu hỏi và lưu tiến độ theo môn.
Đang tải phân bố độ khó.
Ngân hàng câu hỏi
Xem trước · Cuộn vô hạnMột nhà phát triển có thể chọn một cơ sở dữ liệu NoSQL như MongoDB thay vì cơ sở dữ liệu SQL để ứng dụng phân tích thời gian thực vì một số lý do. Cơ sở dữ liệu NoSQL cho phép sử dụng cấu trúc dữ liệu linh hoạt, phù hợp với dữ liệu thay đổi nhanh chóng. Điều này giúp giảm thiểu thời gian và công sức khi thiết kế và triển khai cơ sở dữ liệu. Ngoài ra, cơ sở dữ liệu NoSQL thường có khả năng mở rộng tốt hơn, cho phép xử lý lượng dữ liệu lớn và nhanh chóng. Điều này đặc biệt quan trọng trong ứng dụng phân tích thời gian thực, nơi dữ liệu được cập nhật liên tục và cần được xử lý nhanh chóng để cung cấp thông tin chính xác và kịp thời.
Để tạo một server trong Node.js, chúng ta cần sử dụng một module được tích hợp sẵn. Trong các lựa chọn trên, module nào được sử dụng để tạo server?
Sử dụng async/await trong mã nguồn này mang lại nhiều lợi ích. Trước hết, nó giúp mã nguồn trở nên dễ đọc và dễ hiểu hơn. Điều này là do async/await cho phép chúng ta viết mã nguồn theo trình tự thời gian thực, giống như viết mã nguồn đồng bộ. Điều này giúp giảm thiểu sự phức tạp và khó hiểu của mã nguồn. Ngoài ra, async/await cũng giúp đơn giản hóa việc xử lý lỗi bằng cách sử dụng khối try/catch. Khi sử dụng async/await, chúng ta có thể dễ dàng bắt và xử lý lỗi bằng cách sử dụng khối try/catch, thay vì phải sử dụng các hàm callback phức tạp. Điều này giúp giảm thiểu sự phức tạp và khó hiểu của mã nguồn. Tuy nhiên, async/await không loại bỏ hoàn toàn nhu cầu sử dụng hàm callback. Trong một số trường hợp, chúng ta vẫn cần sử dụng hàm callback để xử lý các tác vụ phức tạp. Vì vậy, async/await không phải là giải pháp hoàn hảo, nhưng nó là một công cụ mạnh mẽ giúp chúng ta viết mã nguồn dễ đọc, dễ hiểu và dễ bảo trì.
Trong Handlebars template, {{greeting}} được hiểu là biểu thức mẫu (template expression). Khi bạn truyền dữ liệu { greeting: 'Hi' } vào template, biểu thức mẫu sẽ được thay thế bằng giá trị thực tế. Trong trường hợp này, {{greeting}} sẽ được thay thế bằng 'Hi'. Do đó, kết quả cuối cùng sẽ là <p>Hi</p>.
Để phân tích kịch bản và xác định các hoạt động CRUD MongoDB có lợi nhất, chúng ta cần xem xét các yêu cầu của ứng dụng quản lý nhiệm vụ. Ứng dụng cần xử lý các hoạt động tạo, đọc, cập nhật và xóa nhiệm vụ bởi người dùng. Người dùng có thể cập nhật trạng thái của một nhiệm vụ và xóa nhiệm vụ không còn cần thiết. Trong trường hợp này, chúng ta có thể sử dụng các hoạt động CRUD sau: - Tạo mới nhiệm vụ: Sử dụng insertOne để tạo mới nhiệm vụ mới. - Đọc nhiệm vụ: Sử dụng find để đọc nhiệm vụ. - Xóa nhiệm vụ: Sử dụng deleteOne để xóa nhiệm vụ không còn cần thiết. Do đó, các hoạt động CRUD MongoDB có lợi nhất cho ứng dụng quản lý nhiệm vụ là: - Sử dụng insertOne để tạo mới nhiệm vụ. - Sử dụng find để đọc nhiệm vụ. - Sử dụng deleteOne để xóa nhiệm vụ.
Để giới hạn số lượng file được tải lên tối đa 5 file, bạn có thể sử dụng Multer với phương thức upload.array(). Phương thức này cho phép bạn tải lên nhiều file cùng một lúc và giới hạn số lượng file được tải lên.
HTTPS là viết tắt của HyperText Transfer Protocol Secure, là một giao thức truyền tải siêu văn bản an toàn. Nó là một phiên bản được mã hóa của giao thức HTTP (HyperText Transfer Protocol), được sử dụng để truyền tải dữ liệu giữa máy chủ và trình duyệt web. HTTPS sử dụng chứng chỉ SSL/TLS để mã hóa dữ liệu, đảm bảo rằng dữ liệu được truyền tải an toàn và không bị truy cập trái phép. Điều này giúp bảo vệ thông tin cá nhân và bảo mật cho các giao dịch trực tuyến. Ngoài ra, HTTPS cũng giúp cải thiện uy tín và tin cậy của trang web, vì nó cho biết rằng trang web đó đã được chứng nhận và được bảo vệ bởi một tổ chức uy tín.