SDN302DễKỳ 7Chuyên ngành Cập nhật 28/07/2026

Server-Side development with NodeJS, Express, and MongoDB

Ôn luyện SDN302 – Phát triển Server-Side với Node.js, Express và MongoDB: ngân hàng câu hỏi trắc nghiệm có giải thích chi tiết, luyện thi cuối kỳ hiệu quả. Nội dung bao quát Node.js, npm, Event Loop bất đồng bộ, HTTP/HTTPS, Express.js, middleware, Express Generator, RESTful API, MongoDB & Mongoose, Mongoose Population, xác thực Passport/JWT, session & cookie, mã hoá bcrypt, upload/download file với Multer, CORS, OAuth và template EJS/Handlebars. Môn 3 tín chỉ tại FPT University, tiên quyết DBI202 và FER202.

194Câu hỏi
2Bộ đề
11Chủ đề

Câu hỏi của môn

64/194 câuCòn 130
45Which of the following will correctly create a readable stream in Node.js?4 lựa chọnTrung bình60% trả lời đúng
Aconst fs = require('fs'); const stream = fs.createStream('input.txt');
Bconst fs = require('fs'); const stream = fs.createReadStream('input.txt');
Cconst fs = require('fs'); const stream = fs.createReadable('input.txt');
Dconst fs = require('fs'); const stream = fs.newStream('input.txt');
Lời giải

Để tạo một luồng đọc có thể đọc được trong Node.js, bạn cần sử dụng hàm createReadStream() từ module fs. Hàm này sẽ tạo một luồng đọc từ một tệp tin cụ thể. Ví dụ, bạn muốn đọc nội dung của tệp tin 'input.txt', bạn có thể sử dụng hàm createReadStream() như sau: const fs = require('fs'); const stream = fs.createReadStream('input.txt');. Điều này sẽ tạo một luồng đọc có thể đọc được nội dung của tệp tin 'input.txt'.

Mở trang câu hỏi này →
46What is Express Generator?4 lựa chọnDễ86% trả lời đúng
AA tool for managing databases.
BA command-line tool that helps you quickly generate the basic structure and files for an Express.js application.
CA library for creating front-end UI components.
DA debugger for Node.js applications.
Lời giải
Express Generator là một công cụ dòng lệnh giúp bạn nhanh chóng tạo ra cấu trúc cơ bản và các tệp tin cho một ứng dụng Express.js. Nó cho phép bạn tạo ra các tệp tin như app.js, package.json, và các thư mục khác mà bạn cần để bắt đầu xây dựng ứng dụng Express.js. Với Express Generator, bạn có thể tạo ra ứng dụng Express.js từ đầu mà không cần phải tạo ra từng tệp tin một cách thủ công. Điều này giúp tiết kiệm thời gian và công sức của bạn khi xây dựng ứng dụng Express.js.
Mở trang câu hỏi này →
A<%- include('header') %> includes the header partial.
B<%- include('footer') %> includes the footer partial.
C<h2>Welcome to the Home Page</h2> includes the content.
D<title>Home</title> sets the page title.
Lời giải
Để bao gồm một tiêu đề và chân trang chung trong nhiều template EJS, bạn cần sử dụng lệnh include. Lệnh này cho phép bạn bao gồm một phần tử khác vào trong một template. Ví dụ, để bao gồm tiêu đề và chân trang, bạn có thể sử dụng lệnh <%- include('header') %> và <%- include('footer') %>. Điều này giúp bạn tránh phải lặp lại mã nguồn và dễ dàng quản lý các phần tử chung.
Mở trang câu hỏi này →
48Which HTTP method is typically used to create a new resource in a RESTful API?4 lựa chọnDễ100% trả lời đúng
AGET
BPOST
CPUT
DDELETE
Lời giải
Trong RESTful API, phương thức HTTP được sử dụng để tạo một tài nguyên mới thường là POST. Phương thức POST được sử dụng để gửi dữ liệu đến một URL để tạo một tài nguyên mới. Ví dụ, khi bạn muốn tạo một tài khoản mới trên một trang web, bạn sẽ gửi một yêu cầu POST đến URL tạo tài khoản với các thông tin về tài khoản mới. Phương thức POST khác với phương thức GET, vì GET chỉ được sử dụng để đọc dữ liệu từ một URL, trong khi POST được sử dụng để tạo hoặc cập nhật dữ liệu. Ngoài ra, phương thức POST cũng khác với phương thức PUT, vì PUT được sử dụng để cập nhật một tài nguyên hiện có, trong khi POST được sử dụng để tạo một tài nguyên mới. Cuối cùng, phương thức DELETE được sử dụng để xóa một tài nguyên hiện có, không phải tạo một tài nguyên mới.
Mở trang câu hỏi này →
ANone
BGet, Get
CPost, Post
DGet, Post
Lời giải
Trong giao thức HTTP, phương thức GET được sử dụng để lấy thông tin từ máy chủ đã cho sử dụng một URL đã cho. Yêu cầu sử dụng phương thức GET chỉ nên lấy dữ liệu.
Mở trang câu hỏi này →
50How to handle HTTP requests and responses in Node.js?4 lựa chọnTrung bình57% trả lời đúng
AUsing the built-in morgan module
BUsing the built-in http module
CUsing the built-in body-parser module
DUsing the built-in cookies-parser module
Lời giải
Để xử lý yêu cầu và phản hồi HTTP trong Node.js, bạn có thể sử dụng các module tích hợp sẵn của Node.js. Một trong những cách phổ biến nhất là sử dụng module http. Module http cho phép bạn tạo và quản lý các kết nối HTTP, xử lý yêu cầu và phản hồi, cũng như gửi phản hồi lại cho khách hàng. Bạn có thể sử dụng các phương thức như http.createServer(), http.request(), http.response để xử lý các yêu cầu và phản hồi HTTP. Ngoài ra, bạn cũng có thể sử dụng các module khác như morgan để ghi nhật ký các yêu cầu và phản hồi HTTP, nhưng module http là module cơ bản và quan trọng nhất để xử lý HTTP trong Node.js.
Mở trang câu hỏi này →
51HTTP code means that the data does not pass validation, or is in the wrong format?4 lựa chọnTrung bình50% trả lời đúng
A100
B101
C404
D400
Lời giải
Mã HTTP 400 được sử dụng để chỉ ra rằng dữ liệu không đáp ứng các yêu cầu xác thực hoặc không được định dạng đúng. Điều này có thể xảy ra khi dữ liệu được gửi đến một API nhưng không đáp ứng các yêu cầu về cấu trúc hoặc nội dung. Ví dụ, nếu một ứng dụng gửi một yêu cầu đăng ký với thông tin không đầy đủ, API có thể trả về mã HTTP 400 để chỉ ra rằng dữ liệu không hợp lệ. Ngoài ra, mã HTTP 400 cũng có thể được sử dụng để chỉ ra rằng dữ liệu không được định dạng đúng, chẳng hạn như khi gửi dữ liệu JSON nhưng không đúng định dạng.
Mở trang câu hỏi này →
52What is an API Gateway?4 lựa chọnDễ75% trả lời đúng
AA tool that manages and routes API requests.
BA database management system.
CA web server that hosts static files.
DA software development framework.
Lời giải
Một API Gateway (Cổng Trực tiếp API) là một phần mềm hoặc dịch vụ trung gian giúp quản lý và định tuyến các yêu cầu API. Nó đóng vai trò như một điểm vào duy nhất cho các ứng dụng và dịch vụ API, giúp phân phối và quản lý lưu lượng truy cập đến các nguồn dữ liệu khác nhau. API Gateway thường được sử dụng để bảo vệ và bảo mật các API khỏi các cuộc tấn công từ bên ngoài, đồng thời giúp tối ưu hóa hiệu suất và khả năng mở rộng của các ứng dụng và dịch vụ API. Nó cũng giúp cung cấp các tính năng như xác thực và ủy quyền, cũng như theo dõi và phân tích lưu lượng truy cập API.
Mở trang câu hỏi này →
53Which of the following statements correctly describe Serialization?4 lựa chọnKhó29% trả lời đúng
ASerialization converts an object into a stream of bytes.
BSerialization is used to convert data into JSON format.
CSerialization saves the state of the object in an easily transmittable form.
DSerialization compresses data to save storage space.
Lời giải
Serialization là quá trình chuyển đổi một đối tượng thành một luồng byte. Điều này cho phép lưu trữ và truyền tải đối tượng một cách dễ dàng. Ví dụ, khi bạn muốn lưu trữ một đối tượng vào file hoặc truyền tải nó qua mạng, bạn cần chuyển đổi nó thành một chuỗi byte. Điều này giúp đối tượng có thể được lưu trữ và truyền tải một cách hiệu quả. Ngoài ra, Serialization còn giúp bảo vệ dữ liệu khỏi bị thay đổi hoặc mất mát trong quá trình truyền tải.
Mở trang câu hỏi này →
AA new database is created automatically when you insert data into a collection in that database.
BYou must manually create a database before creating a collection.
CA new collection is created using the createCollection() method.
DA new collection is created using the addCollection() method.
Lời giải
Để tạo một cơ sở dữ liệu mới và một bộ sưu tập trong MongoDB, bạn cần hiểu các bước cơ bản. Trước hết, bạn cần tạo một cơ sở dữ liệu mới. Trong MongoDB, bạn không cần tạo cơ sở dữ liệu trước khi tạo bộ sưu tập. Thay vào đó, bạn có thể tạo một bộ sưu tập mới mà không cần tạo cơ sở dữ liệu trước đó. Để tạo một bộ sưu tập mới, bạn có thể sử dụng phương thức createCollection(). Phương thức này cho phép bạn tạo một bộ sưu tập mới với các tùy chọn tùy chỉnh. Ví dụ, bạn có thể chỉ định tên bộ sưu tập, chế độ lưu trữ và các tùy chọn khác. Ngoài ra, bạn cũng có thể tạo một bộ sưu tập mới bằng cách sử dụng phương thức insert() để chèn dữ liệu vào một bộ sưu tập chưa tồn tại.
Mở trang câu hỏi này →
AUse insertOne to create new tasks.
BUse find to retrieve tasks.
CUse updateMany to delete tasks.
DUse deleteOne to delete tasks.
Lời giải
Để 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ụ.
Mở trang câu hỏi này →
56Which statements correctly describe the characteristics of NoSQL databases?4 lựa chọnDễ100% trả lời đúng
ANoSQL databases are horizontally scalable.
BNoSQL databases are primarily used for structured data.
CNoSQL databases do not use relational data modeling techniques.
DNoSQL databases cannot handle large volumes of data.
Lời giải
Câu hỏi này yêu cầu bạn xác định các đặc điểm chính của cơ sở dữ liệu NoSQL. Cơ sở dữ liệu NoSQL là một loại cơ sở dữ liệu không dựa trên quan hệ, được thiết kế để xử lý dữ liệu không có cấu trúc hoặc nửa cấu trúc. Một trong những đặc điểm chính của cơ sở dữ liệu NoSQL là khả năng mở rộng ngang dọc, điều này có nghĩa là chúng có thể dễ dàng mở rộng để xử lý lượng dữ liệu lớn hơn mà không cần phải thay đổi cấu trúc cơ sở dữ liệu. Ngoài ra, cơ sở dữ liệu NoSQL không sử dụng kỹ thuật mô hình hóa dữ liệu dựa trên quan hệ như cơ sở dữ liệu quan hệ truyền thống. Điều này cho phép chúng xử lý dữ liệu phức tạp và linh hoạt hơn. Vì vậy, hai câu trả lời đúng là: 'Cơ sở dữ liệu NoSQL có khả năng mở rộng ngang dọc' và 'Cơ sở dữ liệu NoSQL không sử dụng kỹ thuật mô hình hóa dữ liệu dựa trên quan hệ'.
Mở trang câu hỏi này →
57Which of the following are valid options for the populate() method in Mongoose?4 lựa chọnTrung bình67% trả lời đúng
Aselect
Bpath
Cmodel
Dfield
Lời giải
Mẹo chọn đáp án đúng cho câu hỏi này là bạn cần hiểu về cách sử dụng phương thức populate() trong Mongoose. Phương thức này cho phép bạn tải dữ liệu từ các mô hình khác vào mô hình hiện tại. Các tham số hợp lệ cho phương thức populate() bao gồm 'select' và 'path'. 'select' cho phép bạn chọn các trường dữ liệu muốn tải, trong khi 'path' cho phép bạn chỉ định đường dẫn đến mô hình khác.
Mở trang câu hỏi này →
APost.find().populate('author').lean();
BPost.find().populate('author').exec();
CPost.find().populate({ path: 'author' }).exec();
DPost.find().populate({ ref: 'User' }).exec();
Lời giải

Để populate tài liệu tham chiếu trong Mongoose, chúng ta cần sử dụng phương thức populate(). Có một số cách để thực hiện điều này. Trước hết, chúng ta có thể sử dụng phương thức find() và populate() như sau: Post.find().populate('author').exec();. Phương thức populate() sẽ tìm kiếm tài liệu tham chiếu 'author' và thêm nó vào kết quả tìm kiếm. Ngoài ra, chúng ta cũng có thể sử dụng đối tượng populate() với tham số path để chỉ định đường dẫn đến tài liệu tham chiếu:

Lời giải
Post.find().populate({
  path: 'author'
}

).exec();. Đây là hai cách phổ biến để populate tài liệu tham chiếu trong Mongoose.

Mở trang câu hỏi này →
Apopulate()
Bfind()
Clookup()
Daggregate()
Lời giải
Để populate các tài liệu tham chiếu trong Mongoose, chúng ta có thể sử dụng một số phương thức khác nhau. Phương thức populate() là một trong những phương thức được sử dụng rộng rãi nhất để thực hiện việc này. Nó cho phép chúng ta lấy dữ liệu từ các tài liệu tham chiếu và kết hợp chúng vào một tài liệu chính. Ví dụ, nếu chúng ta có một tài liệu User với một trường tham chiếu đến tài liệu Product, chúng ta có thể sử dụng populate() để lấy thông tin về sản phẩm mà người dùng đã mua. Ngoài ra, chúng ta cũng có thể sử dụng các phương thức khác như find(), lookup() và aggregate() để thực hiện việc populate, nhưng populate() là phương thức được khuyến khích sử dụng.
Mở trang câu hỏi này →
ATo encrypt the data on the server.
BTo request a digital certificate from a Certificate Authority (CA).
CTo create a private key.
DTo verify the domain ownership.
Lời giải
CSR (Yêu cầu ký số chứng chỉ) là một phần quan trọng trong quá trình tạo chứng chỉ SSL. Mục đích chính của CSR là yêu cầu một chứng chỉ số học từ một Cơ quan Ký số Chứng chỉ (CA). Khi tạo CSR, bạn sẽ cung cấp thông tin về tổ chức của mình, bao gồm tên tổ chức, địa chỉ, tên miền và các thông tin khác. Sau đó, bạn sẽ gửi CSR đến CA để yêu cầu họ ký số chứng chỉ số học. CA sẽ kiểm tra thông tin và xác minh tính hợp lệ của tổ chức trước khi ký số chứng chỉ. Chứng chỉ số học này sẽ được sử dụng để thiết lập kết nối SSL/TLS giữa máy chủ và khách hàng, đảm bảo rằng thông tin được truyền đi an toàn và bảo mật.
Mở trang câu hỏi này →
61What is the MongoDB equivalent of a "table"?4 lựa chọnTrung bình67% trả lời đúng
ADocument
BField
CCollection
DSchema
Lời giải
Trong MongoDB, một 'collection' tương đương với một 'bảng' trong cơ sở dữ liệu quan hệ. Một collection là một nhóm các tài liệu (document) được lưu trữ cùng nhau trong một cơ sở dữ liệu MongoDB. Mỗi tài liệu trong một collection có thể có cấu trúc khác nhau, nhưng chúng đều có một số trường (field) chung. Ví dụ, nếu bạn có một collection tên là 'khach_hang', mỗi tài liệu trong collection này có thể có các trường như 'ten', 'tuoi', 'dia_chi', v.v. Collection là một khái niệm quan trọng trong MongoDB vì nó cho phép bạn quản lý và truy vấn dữ liệu một cách hiệu quả.
Mở trang câu hỏi này →
62What are not limitations of Indexes in MongoDB?4 lựa chọnTrung bình60% trả lời đúng
AIndexes can take up a significant amount of disk space, especially for large collections or indexes with many fields.
BIndexes can slow down write operations, as MongoDB needs to update the index whenever a document is inserted, updated, or deleted.
CIndexes can become fragmented over time, which can reduce their effectiveness. MongoDB provides tools to analyze and optimize indexes to address this issue.
DIndexes can query on large collections by reducing the number of documents that need to be examined
Lời giải
Các giới hạn của Indexes trong MongoDB bao gồm việc chiếm một lượng không gian đĩa đáng kể, đặc biệt là đối với các tập hợp lớn hoặc các chỉ số có nhiều trường. Các chỉ số có thể làm chậm các hoạt động ghi, vì MongoDB cần cập nhật chỉ số mỗi khi một bản ghi được chèn, cập nhật hoặc xóa. Các chỉ số có thể bị phân mảnh theo thời gian, làm giảm hiệu quả của chúng. Để giải quyết vấn đề này, MongoDB cung cấp các công cụ để phân tích và tối ưu hóa các chỉ số. Tuy nhiên, một số lợi ích của Indexes bao gồm việc giảm số lượng bản ghi cần được kiểm tra khi thực hiện truy vấn trên các tập hợp lớn.
Mở trang câu hỏi này →
63How to install Express?4 lựa chọnDễ80% trả lời đúng
Anode install express --save
Bnpm uninstall express -save
Cnpm install express -save
Dnpm express install
Lời giải
Để cài đặt Express, bạn cần sử dụng lệnh npm install express -save. Lệnh này sẽ cài đặt Express và lưu trữ nó vào file package.json trong dự án của bạn. Điều này giúp bạn dễ dàng quản lý các gói phụ thuộc và đảm bảo rằng tất cả các thành viên trong nhóm đều sử dụng cùng một phiên bản của Express. Ngoài ra, lệnh npm install express -save còn giúp bạn dễ dàng cập nhật hoặc xóa Express trong tương lai. Nếu bạn sử dụng lệnh npm install express mà không có tùy chọn -save, Express sẽ được cài đặt nhưng không được lưu trữ vào file package.json. Điều này có thể gây ra vấn đề khi bạn cần cập nhật hoặc xóa Express sau này.
Mở trang câu hỏi này →
64What is the purpose of CORS?4 lựa chọnTrung bình50% trả lời đúng
ATo manage secure communication over HTTPS
BTo enable requests from one origin to another
CTo improve database performance
DTo encrypt data between clients and servers
Lời giải
CORS (Cross-Origin Resource Sharing) là một kỹ thuật giúp cho các trang web có thể yêu cầu dữ liệu từ các nguồn khác nhau trên internet mà không bị chặn bởi chính sách bảo mật của trình duyệt. Mục đích chính của CORS là cho phép các yêu cầu từ một nguồn (origin) được phép truy cập vào các nguồn khác nhau. Điều này rất quan trọng vì nó cho phép các ứng dụng web có thể giao tiếp với nhau một cách an toàn và hiệu quả. Ví dụ, một trang web có thể yêu cầu dữ liệu từ một API khác mà không cần phải chuyển hướng qua một trang web trung gian. Điều này giúp giảm thiểu thời gian tải trang và cải thiện trải nghiệm người dùng.
Mở trang câu hỏi này →