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

104/194 câuCòn 90
85Which of the following are valid ways to handle errors in Node.js?4 lựa chọnTrung bình60% trả lời đúng
AIgnoring errors as Node.js handles them automatically
BUsing try-catch block
CUsing process.on('exit') event
DAttaching an error event listener to EventEmitter instances
Lời giải
Các cách xử lý lỗi trong Node.js hợp lệ là gì? Trong Node.js, việc xử lý lỗi là rất quan trọng để đảm bảo ứng dụng của bạn không bị dừng đột ngột khi gặp lỗi. Có một số cách để xử lý lỗi trong Node.js, bao gồm sử dụng khối try-catch để bắt các lỗi khi thực hiện các hàm, sử dụng sự kiện error của EventEmitter để bắt các lỗi khi sử dụng các đối tượng EventEmitter. Sử dụng khối try-catch là một cách phổ biến để bắt các lỗi khi thực hiện các hàm. Khi gặp lỗi, khối try-catch sẽ bắt lỗi và thực hiện các hành động cần thiết để xử lý lỗi. Sử dụng sự kiện error của EventEmitter là một cách khác để bắt các lỗi khi sử dụng các đối tượng EventEmitter. Khi gặp lỗi, sự kiện error sẽ được kích hoạt và thực hiện các hành động cần thiết để xử lý lỗi. Còn cách khác như sử dụng sự kiện exit của process để bắt các lỗi khi ứng dụng dừng đột ngột, nhưng cách này không được khuyến khích vì nó không thể bắt được tất cả các lỗi. Cuối cùng, cách khác như bỏ qua lỗi vì Node.js tự động xử lý lỗi, nhưng cách này không được khuyến khích vì nó có thể dẫn đến ứng dụng bị dừng đột ngột khi gặp lỗi.
Mở trang câu hỏi này →
86What is the default port for HTTPS?4 lựa chọnDễ75% trả lời đúng
A80
B443
C8080
D8443
Lời giải
HTTPS (HyperText Transfer Protocol Secure) là một giao thức truyền thông ứng dụng được sử dụng để truyền tải dữ liệu qua internet một cách an toàn. Default port cho HTTPS là 443. Điều này có nghĩa là khi bạn truy cập vào một trang web sử dụng HTTPS, trình duyệt web của bạn sẽ kết nối đến máy chủ web tại cổng 443 để tải xuống nội dung. Cổng 443 được sử dụng rộng rãi vì nó nằm trong phạm vi cổng được phân bổ cho giao thức TCP/IP, giúp tránh xung đột với các giao thức khác. Ngoài ra, việc sử dụng cổng 443 giúp tăng cường bảo mật cho giao thức HTTPS bằng cách ngăn chặn việc truy cập trái phép vào dữ liệu được truyền tải.
Mở trang câu hỏi này →
87What is the primary purpose of Single Sign-On (SSO)?4 lựa chọnDễ75% trả lời đúng
ATo allow users to access multiple applications with a single login
BTo improve password security by requiring complex passwords
CTo provide multi-factor authentication
DTo encrypt user data during transmission
Lời giải
Single Sign-On (SSO) là một tính năng cho phép người dùng đăng nhập vào nhiều ứng dụng khác nhau một lần, thay vì phải đăng nhập vào từng ứng dụng riêng biệt. Điều này giúp giảm thiểu sự phức tạp và tăng cường trải nghiệm người dùng. Khi sử dụng SSO, người dùng chỉ cần nhớ một tài khoản và mật khẩu duy nhất, sau đó họ có thể truy cập vào tất cả các ứng dụng được kết nối mà không cần phải đăng nhập lại. Điều này đặc biệt hữu ích trong các môi trường doanh nghiệp hoặc tổ chức lớn, nơi người dùng cần truy cập vào nhiều ứng dụng khác nhau để thực hiện công việc của mình.
Mở trang câu hỏi này →
88Which statements correctly describe the purpose of Express Generator?4 lựa chọnDễ100% trả lời đúng
AIt sets up a project skeleton with the necessary files and folders.
BIt compiles JavaScript code into machine code.
CIt allows you to focus on building your application's features instead of setting up the initial boilerplate code.
DIt is used to manage user authentication and sessions.
Lời giải
Express Generator là một công cụ mạnh mẽ giúp bạn tạo ra một cấu trúc dự án cơ bản với các tệp và thư mục cần thiết. Nó cho phép bạn tập trung vào xây dựng các tính năng của ứng dụng thay vì phải dành thời gian để thiết lập mã cơ bản. Điều này giúp bạn có thể bắt đầu phát triển ứng dụng của mình nhanh chóng và hiệu quả hơn. Ngoài ra, Express Generator cũng giúp bạn có thể dễ dàng quản lý và cấu hình các tệp và thư mục của dự án.
Mở trang câu hỏi này →
89Which file extension is typically used for EJS templates?4 lựa chọnDễ100% trả lời đúng
A.ejs
B.html
C.js
D.tpl
Lời giải
EJS (Embedded JavaScript) là một loại mẫu mẫu HTML cho phép bạn sử dụng JavaScript bên trong các tệp tin mẫu. Khi sử dụng EJS, bạn có thể tạo ra các tệp tin mẫu có thể được sử dụng trong các ứng dụng web. Để xác định một tệp tin EJS, bạn cần biết rằng nó thường có phần mở rộng là .ejs. Điều này giúp cho máy tính biết rằng tệp tin đó là một tệp tin EJS và có thể được xử lý theo cách đặc biệt. Các phần mở rộng khác như .html, .js và .tpl không phải là các phần mở rộng chính thức cho EJS.
Mở trang câu hỏi này →
90What will the following API endpoint4 lựa chọncó codeDễ100% trả lời đúng
Đề bài
return when called with an invalid user ID? app.get('/user/:id', (req, res) => {
  const userId = req.params.id; if (!isValidId(userId)) {
    res.status(400).send("Invalid ID");
  }
  else {
    res.status(200).send("User details");
  }
}

);

A400 and "Invalid ID"
B500 and "Internal Server Error"
C404 and "Not Found"
D200 and "User details"
Lời giải
Khi gọi API endpoint '/user/:id' với một ID không hợp lệ, ứng dụng sẽ trả về trạng thái lỗi 400 và thông điệp 'Invalid ID'. Điều này là vì ứng dụng đã được thiết kế để kiểm tra xem ID được cung cấp có hợp lệ hay không trước khi trả về thông tin người dùng. Nếu ID không hợp lệ, ứng dụng sẽ trả về trạng thái lỗi 400 và thông điệp lỗi cụ thể. Điều này giúp ứng dụng cung cấp thông tin phản hồi rõ ràng và hữu ích cho người dùng.
Mở trang câu hỏi này →
91Which header is used to send JSON data in an API request?4 lựa chọnDễ100% trả lời đúng
AAccept-Encoding
BContent-Type
CAuthorization
DConnection
Lời giải
Để gửi dữ liệu JSON trong một yêu cầu API, bạn cần sử dụng tiêu đề 'Content-Type' với giá trị 'application/json'. Điều này cho biết server biết rằng dữ liệu được gửi dưới dạng JSON. Ví dụ, khi gửi yêu cầu API bằng phương thức POST, bạn có thể thêm tiêu đề 'Content-Type' vào header của yêu cầu như sau: Content-Type: application/json. Điều này giúp server hiểu và xử lý dữ liệu JSON một cách chính xác.
Mở trang câu hỏi này →
Amongodb://localhost:27017/mydatabase is a standard connection string format. mongodb+srv://cluster0.mongodb.net/mydatabase is an SRV connection format.
Bmongodb://localhost:27017/mydatabase is an SRV connection format. mongodb+srv://cluster0.mongodb.net/mydatabase is a standard connection string format.
CBoth connection strings are SRV formats.
DBoth connection strings are standard formats.
Lời giải
Các định dạng chuỗi kết nối được phân tích dưới đây để xác định định dạng SRV và chuẩn của MongoDB. Chuỗi kết nối mongodb://localhost:27017/mydatabase sử dụng định dạng chuẩn vì nó sử dụng giao thức TCP/IP để kết nối đến máy chủ MongoDB. Trong khi đó, chuỗi kết nối mongodb+srv://cluster0.mongodb.net/mydatabase sử dụng định dạng SRV vì nó sử dụng giao thức SRV (Service Location Protocol) để tìm kiếm máy chủ MongoDB. Giao thức SRV cho phép tìm kiếm máy chủ MongoDB dựa trên tên miền và giúp dễ dàng cấu hình và quản lý các máy chủ MongoDB.
Mở trang câu hỏi này →
AImport the MongoClient class from the mongodb module with the require() statement.
BCreate an instance of the MongoDatabase class.
CCall the connect() method on the MongoClient instance by passing the MongoDB server URL.
DUse the import statement to import MongoClient.
Lời giải
Để thiết lập một kết nối đến máy chủ MongoDB bằng cách sử dụng lớp MongoClient, bạn cần thực hiện các bước sau. Trước hết, bạn cần nhập lớp MongoClient từ mô-đun mongodb bằng cách sử dụng hàm require(). Sau đó, bạn cần tạo một đối tượng của lớp MongoClient bằng cách gọi hàm MongoClient(). Cuối cùng, bạn cần gọi phương thức connect() trên đối tượng MongoClient đã tạo và truyền vào địa chỉ URL của máy chủ MongoDB. Điều này sẽ giúp bạn thiết lập một kết nối đến máy chủ MongoDB.
Mở trang câu hỏi này →
94What is Serialization?4 lựa chọnDễ100% trả lời đúng
AThe process of converting a data object into a series of bytes for saving or transmitting.
BThe process of converting text into an image.
CThe process of encrypting data.
DThe process of compressing data.
Lời giải
Serialization là quá trình chuyển đổi một đối tượng dữ liệu thành một chuỗi byte để lưu trữ hoặc truyền tải. Quá trình này giúp cho dữ liệu có thể được lưu trữ trong các tệp tin hoặc truyền tải qua mạng mà không bị mất thông tin. Serialization thường được sử dụng trong các ứng dụng cần lưu trữ và tải lại dữ liệu, chẳng hạn như các trò chơi điện tử, các ứng dụng di động và các hệ thống quản lý cơ sở dữ liệu. Quá trình này cũng giúp cho dữ liệu có thể được truy cập và sử dụng lại một cách dễ dàng.
Mở trang câu hỏi này →
AThe MongoClient class represents a database connection.
BThe MongoClient class represents a collection.
CA connection string must be passed to the MongoClient constructor.
DA connection string is not required to connect to MongoDB.
Lời giải
MongoClient class trong MongoDB là một lớp đại diện cho kết nối cơ sở dữ liệu. Để kết nối với MongoDB, bạn cần tạo một đối tượng MongoClient và cung cấp chuỗi kết nối (connection string) cho nó. Chuỗi kết nối chứa thông tin về địa chỉ máy chủ, tên cơ sở dữ liệu và các thông tin khác cần thiết để kết nối.
Mở trang câu hỏi này →
96Which function is used to import the MongoDB driver in a Node.js application?4 lựa chọnDễ100% trả lời đúng
Aimport mongodb from 'mongodb';
Brequire('mongodb');
Cinclude('mongodb');
Duse('mongodb');
Lời giải
Để sử dụng MongoDB trong ứng dụng Node.js, chúng ta cần nhập thư viện MongoDB. Trong đó, hàm được sử dụng để nhập thư viện MongoDB là require(). Hàm này cho phép chúng ta nhập các module trong Node.js. Ví dụ, để nhập thư viện MongoDB, chúng ta sử dụng require('mongodb');. Hàm này sẽ trả về một đối tượng có thể được sử dụng để tương tác với MongoDB. Ngoài ra, chúng ta cũng có thể sử dụng import để nhập thư viện MongoDB, nhưng require() vẫn là lựa chọn phổ biến hơn.
Mở trang câu hỏi này →
97Consider the following code snippet using Express.js. Identify the parts responsible4 lựa chọncó codeKhó33% trả lời đúng
Đề bài
for defining a route and starting the server. const express = require('express');

const app = express();

Đề bài
app.get('/', (req, res) => {
  res.send('Hello, world!');
}

);

Đề bài
app.listen(3000, () => {
  console.log('Server is running on port 3000');
}

); (Choose 2 answers)

AThe require('express') statement defines the route.
BThe app.get('/', (req, res) => { ... }) statement defines the route.
CThe app.listen(3000, () => { ... }) statement starts the server.
DThe res.send('Hello, world!') statement starts the server.
Lời giải

Để trả lời câu hỏi này, chúng ta cần hiểu rõ về cách sử dụng Express.js. Đầu tiên, chúng ta cần nhập thư viện Express.js bằng cách sử dụng câu lệnh require('express'). Sau đó, chúng ta tạo một đối tượng app bằng cách sử dụng express(). Đối tượng này sẽ được sử dụng để định nghĩa các route và bắt đầu server. Trong ví dụ này, chúng ta sử dụng app.get('/') để định nghĩa một route cho URL '/' và gửi phản hồi 'Hello, world!' lại cho người dùng. Cuối cùng, chúng ta sử dụng

Lời giải
app.listen(3000, () => {
  ...
}

) để bắt đầu server trên cổng 3000 và in ra thông báo 'Server is running on port 3000' khi server đã được bắt đầu. Vì vậy, câu trả lời chính xác là 'The

Lời giải
app.get('/', (req, res) => {
  ...
}

) statement defines the route' và 'The

Lời giải
app.listen(3000, () => {
  ...
}

) statement starts the server'.

Mở trang câu hỏi này →
98What is the purpose of the populate() method in Mongoose?4 lựa chọnDễ100% trả lời đúng
ATo fetch referenced documents
BTo delete documents
CTo update schema
DTo create new collections
Lời giải
Mục đích của phương thức populate() trong Mongoose là để tải về các tài liệu tham chiếu. Khi sử dụng phương thức này, bạn có thể tải về các tài liệu liên quan đến một tài liệu cụ thể. Ví dụ, nếu bạn có một tài liệu người dùng và một tài liệu liên quan đến địa chỉ của người dùng, bạn có thể sử dụng phương thức populate() để tải về cả hai tài liệu cùng một lúc. Điều này giúp bạn có thể truy cập và sử dụng dữ liệu liên quan một cách dễ dàng hơn. Phương thức populate() cũng giúp bạn có thể xây dựng các mối quan hệ giữa các tài liệu trong cơ sở dữ liệu, từ đó giúp bạn có thể quản lý dữ liệu một cách hiệu quả hơn.
Mở trang câu hỏi này →
Đề bài
app.get('/') sends 'Welcome to the homepage!';
app.get('/about') sends 'About us';

a final app.use sends 404 'Page not found'; app.listen on 3000) (Choose 3 answers)

AIt logs all incoming requests to the console.
BIt returns 'Welcome to the homepage!' for GET requests to the root URL.
CIt returns a 404 error for any undefined routes.
DIt only handles POST requests.
Lời giải
Mô tả về mã nguồn Express.js này là một ứng dụng web đơn giản. Khi truy cập qua trình duyệt web, ứng dụng sẽ thực hiện các hành động sau. Trước hết, ứng dụng sẽ ghi lại tất cả các yêu cầu vào console thông qua app.use(). Sau đó, khi người dùng truy cập vào trang chủ (GET /), ứng dụng sẽ hiển thị thông điệp 'Welcome to the homepage!' thông qua app.get('/'). Nếu người dùng truy cập vào trang 'About us' (GET /about), ứng dụng sẽ hiển thị thông điệp 'About us' thông qua app.get('/about'). Tuy nhiên, nếu người dùng truy cập vào bất kỳ đường dẫn nào khác, ứng dụng sẽ hiển thị thông điệp 'Page not found' thông qua app.use(). Cuối cùng, ứng dụng sẽ lắng nghe trên cổng 3000 thông qua app.listen().
Mở trang câu hỏi này →
100Which statements about REST and Express.js routing are true? (Choose 2 answers)4 lựa chọnDễ100% trả lời đúng
AREST stands for Representational State Transfer.
BREST requires using SOAP protocol.
CExpress.js supports RESTful routing through methods like app.get, app.post, app.put, and app.delete.
DRESTful routes do not include HTTP verbs.
Lời giải
REST là một kiến trúc ứng dụng được thiết kế để cung cấp các dịch vụ trên internet. Nó dựa trên các nguyên tắc như client-server, stateless, cacheable, và uniform interface. RESTful routing trong Express.js được hỗ trợ thông qua các phương thức như app.get, app.post, app.put, và app.delete. Điều này cho phép chúng ta tạo ra các route RESTful để xử lý các yêu cầu HTTP khác nhau. Ví dụ, chúng ta có thể tạo một route để xử lý yêu cầu GET để lấy dữ liệu, hoặc một route để xử lý yêu cầu POST để tạo mới dữ liệu.
Mở trang câu hỏi này →
101Which aggregation pipeline stage is used to group documents?4 lựa chọncó codeDễ100% trả lời đúng
Đề bài
db.orders.aggregate([ {
  $group: {
    _id: "$status", total: {
      $sum: "$amount"
    }
  }
}

]);

A$match
B$project
C$group
D$sort
Lời giải
Trình tự pipeline được sử dụng để nhóm tài liệu là $group. Trong ví dụ này, trình tự $group được sử dụng để nhóm các tài liệu theo trạng thái và tính toán tổng tiền cho mỗi trạng thái. Điều này được thực hiện bằng cách sử dụng biểu thức $sum để tính toán tổng tiền và biểu thức _id để xác định trường nhóm.
Mở trang câu hỏi này →
AEmbedding an array of comments within a "dishes" document
BStoring the comments in a separate "comments" collection and use the post ID to link them together
CStoring the comments in a separate "comments" collection, "dishes" collection
DNone of the above
Lời giải
Để tránh đa cấp các tài liệu được tích hợp, phương pháp nào nên làm khi lưu trữ mảng bình luận? Khi lưu trữ một mảng bình luận, chúng ta cần cân nhắc giữa việc tích hợp mảng bình luận vào tài liệu "dishes" hoặc lưu trữ chúng trong một tập hợp "comments" riêng biệt và liên kết chúng với nhau thông qua ID bài đăng. Phương pháp tích hợp mảng bình luận vào tài liệu "dishes" có thể dẫn đến đa cấp các tài liệu được tích hợp, khiến việc truy cập và quản lý dữ liệu trở nên phức tạp hơn. Ngược lại, phương pháp lưu trữ bình luận trong một tập hợp "comments" riêng biệt và liên kết chúng với nhau thông qua ID bài đăng cho phép chúng ta quản lý dữ liệu một cách hiệu quả hơn và tránh đa cấp các tài liệu được tích hợp.
Mở trang câu hỏi này →
103Analyze the following codes: const express = require('express'); const app = express();4 lựa chọncó codeDễ100% trả lời đúng
Đề bài
app.get('/', (req, res) => {
  res.send('Hello, this is a GET request');
}

);

Đề bài
app.listen(3000, () => {
  console.log('Server is running on port 3000');
}

); What is right URL to display the text "Hello, this is a GET request"?

Ahttp://localhost:3000/
Bhttp://localhost:3000/GET
Chttp://localhost:3000/POST
Dhttp://localhost:3000/PUT
Lời giải
Để tìm hiểu về URL đúng để hiển thị văn bản 'Xin chào, đây là một yêu cầu GET', chúng ta cần hiểu về cách thức hoạt động của ứng dụng Express.js. Trong đoạn mã được cung cấp, chúng ta thấy một ứng dụng Express.js được tạo và lắng nghe trên cổng 3000. Khi một yêu cầu GET được gửi đến đường dẫn '/', ứng dụng sẽ trả về văn bản 'Hello, this is a GET request'. Điều này có nghĩa là URL đúng để hiển thị văn bản này là đường dẫn '/' trên cổng 3000. Vì vậy, URL đúng là http://localhost:3000/.
Mở trang câu hỏi này →
104What is OAuth primarily used for?4 lựa chọnDễ100% trả lời đúng
AEncrypting data
BAuthenticating and authorizing users
CStoring user data
DValidating SQL queries
Lời giải
OAuth là một phương thức xác thực và ủy quyền (authentication và authorization) phổ biến được sử dụng để cho phép các ứng dụng hoặc dịch vụ truy cập vào tài nguyên của một tài khoản khác mà không cần phải tiết lộ thông tin đăng nhập của tài khoản đó. OAuth giúp ngăn chặn việc lộ thông tin đăng nhập và giảm thiểu rủi ro bảo mật. Nó cho phép người dùng cho phép ứng dụng hoặc dịch vụ truy cập vào tài nguyên của họ mà không cần phải tiết lộ thông tin đăng nhập của họ. OAuth thường được sử dụng trong các ứng dụng web và di động để cho phép người dùng đăng nhập vào tài khoản của họ trên các ứng dụng khác mà không cần phải nhập lại thông tin đăng nhập.
Mở trang câu hỏi này →