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

184/194 câuCòn 10
A{ type: String }
B{ ref: 'User' }
C{ type: Schema.Types.ObjectId, ref: 'User' }
D{ id: ObjectId }
Lời giải
Để xác định một tham chiếu ObjectId hợp lệ trong Mongoose, bạn cần sử dụng thuộc tính 'type' và 'ref'. 'type' phải được đặt thành 'Schema.Types.ObjectId' để chỉ định rằng nó là một chuỗi ObjectId. 'ref' được sử dụng để chỉ định tên của mô hình mà ObjectId này tham chiếu. Ví dụ, nếu bạn muốn tham chiếu đến mô hình 'User', bạn sẽ sử dụng '{ type: Schema.Types.ObjectId, ref: 'User' }'. Điều này cho phép Mongoose tự động tạo ra các liên kết giữa các mô hình dựa trên ObjectId.
Mở trang câu hỏi này →
166Which statements correctly describe the use of population in Mongoose queries?4 lựa chọnDễ100% trả lời đúng
APopulation is used to join data from multiple collections.
BPopulation is used to update multiple documents.
CPopulation can be done using the populate() method in a query.
DPopulation requires the use of schemas only.
Lời giải
Population trong Mongoose queries là một tính năng giúp bạn kết nối dữ liệu từ nhiều bộ sưu tập (collection) khác nhau. Điều này cho phép bạn truy cập và sử dụng dữ liệu từ các bộ sưu tập khác nhau trong một truy vấn duy nhất. Để sử dụng population, bạn cần sử dụng phương thức populate() trong một truy vấn. Ví dụ, nếu bạn có một bộ sưu tập người dùng (users) và một bộ sưu tập bài viết (posts) mà mỗi bài viết đều có một người dùng tạo ra nó, bạn có thể sử dụng population để lấy được thông tin người dùng tạo ra bài viết. Population không chỉ giúp bạn kết nối dữ liệu từ nhiều bộ sưu tập mà còn giúp bạn giảm thiểu số lượng truy vấn đến cơ sở dữ liệu, từ đó cải thiện hiệu suất của ứng dụng.
Mở trang câu hỏi này →
167Given the following RESTful API route in Express.js, what will be returned4 lựa chọncó codeDễ100% trả lời đúng
Đề bài
for a GET request to /users? app.get('/users', (req, res) => {
  res.status(200).json({
    message: "List of users"
  }
  );
}

);

AHTML content
Ba JSON response with message: "List of users"
Ca 404 Not Found error
Da redirect to /users/all
Lời giải
Khi thực hiện một yêu cầu GET đến đường dẫn /users trong ứng dụng Express.js, ứng dụng sẽ trả về một phản hồi JSON. Trong đoạn mã được cung cấp, hàm get được sử dụng để định nghĩa hành vi khi nhận được yêu cầu GET đến đường dẫn /users. Hàm này sử dụng phương thức status để thiết lập trạng thái phản hồi thành 200, biểu thị cho trạng thái thành công. Sau đó, hàm json được sử dụng để trả về một đối tượng JSON có chứa thông điệp "List of users". Điều này cho thấy ứng dụng sẽ trả về một phản hồi JSON có chứa thông điệp này khi nhận được yêu cầu GET đến đường dẫn /users.
Mở trang câu hỏi này →
168In a RESTful API, what does the DELETE method typically do?4 lựa chọnDễ100% trả lời đúng
ARetrieve data
BUpdate a resource
CCreate a new entry
DRemove a resource
Lời giải
Trong mô hình RESTful API, phương thức DELETE thường được sử dụng để xóa một tài nguyên khỏi hệ thống. Khi một yêu cầu DELETE được gửi đến một URL cụ thể, API sẽ tìm kiếm và loại bỏ tài nguyên đó khỏi cơ sở dữ liệu. Điều này giúp giảm thiểu số lượng dữ liệu không cần thiết và cải thiện hiệu suất của hệ thống. Ví dụ, nếu bạn muốn xóa một bài viết khỏi một trang web blog, bạn sẽ gửi một yêu cầu DELETE đến URL của bài viết đó. Sau đó, API sẽ tìm kiếm và xóa bài viết khỏi cơ sở dữ liệu, đồng thời cập nhật trạng thái của bài viết thành 'đã xóa'.
Mở trang câu hỏi này →
APOST
BGET
CPUT
DDELETE
Lời giải
Trong RESTful API, để tạo và thay thế hoàn toàn một tài nguyên, chúng ta nên sử dụng hai phương thức HTTP khác nhau. Phương thức POST thường được sử dụng để tạo một tài nguyên mới, trong khi phương thức PUT được sử dụng để thay thế hoàn toàn một tài nguyên hiện có. Ví dụ, khi chúng ta muốn tạo một tài khoản mới, chúng ta sẽ gửi một yêu cầu POST đến API, trong khi khi muốn cập nhật thông tin của tài khoản hiện có, chúng ta sẽ gửi một yêu cầu PUT đến API. Điều này giúp phân biệt rõ ràng giữa việc tạo và thay thế tài nguyên, từ đó giúp API trở nên dễ sử dụng và dễ hiểu hơn.
Mở trang câu hỏi này →
170In RESTful APIs, what is the preferred format for data exchange?4 lựa chọnDễ86% trả lời đúng
AHTML
BCSV
CXML
DJSON
Lời giải
Trong RESTful APIs, định dạng dữ liệu trao đổi được khuyến nghị là JSON. JSON (JavaScript Object Notation) là một định dạng dữ liệu nhẹ, dễ đọc và dễ hiểu. Nó được sử dụng rộng rãi trong các ứng dụng web và API để trao đổi dữ liệu giữa máy chủ và khách hàng. JSON cho phép lưu trữ và truyền tải dữ liệu dưới dạng các đối tượng JSON, bao gồm các thuộc tính và giá trị. Điều này làm cho nó trở thành một lựa chọn phổ biến cho các ứng dụng cần trao đổi dữ liệu nhanh chóng và hiệu quả. Ví dụ, khi một ứng dụng yêu cầu dữ liệu từ một API, API sẽ trả về dữ liệu dưới dạng JSON, và ứng dụng sẽ xử lý dữ liệu đó. JSON cũng hỗ trợ các tính năng như dữ liệu có thể được đọc và viết dễ dàng, dữ liệu có thể được kiểm tra và xác minh, và dữ liệu có thể được bảo mật bằng cách sử dụng các phương thức mã hóa.
Mở trang câu hỏi này →
171Which of the following is NOT a valid HTTP method in REST?4 lựa chọnDễ100% trả lời đúng
AGET
BPOST
CFETCH
DDELETE
Lời giải
Trong REST, các phương thức HTTP được sử dụng để thực hiện các hành động khác nhau trên tài nguyên. Các phương thức phổ biến bao gồm GET, POST, DELETE. Tuy nhiên, phương thức FETCH không phải là một phương thức HTTP hợp lệ trong REST. FETCH là một phương thức được sử dụng trong JavaScript để thực hiện các yêu cầu HTTP, nhưng nó không phải là một phần của tiêu chuẩn HTTP. Vì vậy, trong danh sách phương thức HTTP hợp lệ trong REST, chúng ta không bao gồm FETCH.
Mở trang câu hỏi này →
172What is the role of Handlebars partials?4 lựa chọnTrung bình67% trả lời đúng
AThey allow for reusable template pieces
BThey define conditional logic in templates
CThey manage server-side routing
DThey compile templates into JavaScript
Lời giải
Handlebars partials là một tính năng quan trọng trong Handlebars, giúp bạn tái sử dụng các phần mẫu (template pieces) một cách hiệu quả. Khi bạn tạo một partial, bạn có thể sử dụng nó trong nhiều template khác nhau mà không cần phải lặp lại mã nguồn. Điều này giúp giảm thiểu sự lặp lại và tăng cường tính linh hoạt trong việc thiết kế và phát triển ứng dụng. Ví dụ, bạn có thể tạo một partial cho phần header hoặc footer của trang web, sau đó sử dụng nó trong nhiều template khác nhau. Điều này giúp bạn dễ dàng cập nhật và bảo trì mã nguồn của mình.
Mở trang câu hỏi này →
173What renders in this EJS template with data { title: 'Home' }? // app.js4 lựa chọncó codeDễ100% trả lời đúng
Đề bài
app.get('/', (req, res) => res.render('home', {
  title: 'Home'
}

)); //

Đề bài
home.ejs <h1>
<%= title %>
</h1>
A<h1>Home</h1>
B<h1><%= title %></h1>
CTemplate string if data not passed correctly
DDynamic content based on passed object
Lời giải

Trong câu hỏi này, chúng ta được hỏi về việc render trong template EJS. Template EJS là một loại template được sử dụng trong Node.js để render dữ liệu thành HTML. Trong ví dụ này, chúng ta có một route '/' trong ứng dụng Express.js, và một template 'home.ejs'. Template này sử dụng biểu thức <%= %> để render dữ liệu từ đối tượng được truyền vào. Đối tượng này có một thuộc tính 'title' với giá trị 'Home'. Khi render template, biểu thức <%= title %> sẽ được thay thế bằng giá trị của thuộc tính 'title', tức là 'Home'. Do đó, kết quả render sẽ là <h1>Home</h1>.

Mở trang câu hỏi này →
174What renders in this Handlebars template with { greeting: 'Hi' }? //4 lựa chọncó codeDễ71% trả lời đúng
Đề bài
profile.handlebars <p>{
  {
    greeting
  }
}

</p>

A<p>Hi</p>
B<p>{{greeting}}</p>
CTemplate expression if not compiled
DEmpty
Lời giải

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>.

Mở trang câu hỏi này →
175How would you access session data in an Express route?4 lựa chọnDễ100% trả lời đúng
Areq.session
Breq.cookie
Creq.token
Dreq.data
Lời giải
Để truy cập dữ liệu phiên (session data) trong một route của Express, bạn cần sử dụng thuộc tính req.session. req.session là một đối tượng được sử dụng để lưu trữ dữ liệu phiên, cho phép bạn lưu trữ và truy xuất dữ liệu trong suốt quá trình sử dụng ứng dụng. Khi bạn muốn truy cập dữ liệu phiên, bạn có thể sử dụng req.session như một đối tượng có thể được đọc và viết. Ví dụ, bạn có thể sử dụng req.session để lưu trữ thông tin người dùng, như tên, email, v.v. và sau đó sử dụng nó trong các route khác để thực hiện các hành động dựa trên dữ liệu đó. req.cookie và req.token thường được sử dụng để lưu trữ dữ liệu cookie và token, nhưng không phải là phương pháp chính để truy cập dữ liệu phiên. req.data không phải là thuộc tính tồn tại trong Express.
Mở trang câu hỏi này →
176What is the purpose of Passport JWT in security?4 lựa chọnDễ86% trả lời đúng
ATo handle stateless auth with tokens
BTo manage sessions
CTo upload files securely
DTo enable CORS
Lời giải
Passport JWT (JSON Web Token) là một công nghệ được sử dụng trong bảo mật để xử lý xác thực người dùng mà không cần lưu trữ trạng thái. Nó cho phép tạo ra một token chứa thông tin người dùng sau khi họ đã đăng nhập thành công. Token này sẽ được gửi đến máy chủ trong mỗi yêu cầu sau đó, giúp máy chủ xác thực người dùng mà không cần lưu trữ thông tin trạng thái. Điều này giúp tăng hiệu suất và giảm thiểu khả năng bị tấn công bởi các kỹ thuật như session fixation attack.
Mở trang câu hỏi này →
177Which Express.js middleware can be used to prevent brute-force login attacks?4 lựa chọnDễ75% trả lời đúng
Abody-parser
Bexpress-rate-limit
Ccors
Dhelmet
Lời giải
Để ngăn chặn các cuộc tấn công brute-force khi đăng nhập, bạn có thể sử dụng middleware Express.js là express-rate-limit. Middleware này cho phép bạn giới hạn số lượng yêu cầu từ một địa chỉ IP trong một khoảng thời gian nhất định. Điều này giúp ngăn chặn các cuộc tấn công brute-force bằng cách giới hạn số lần thử đăng nhập từ một địa chỉ IP trong một khoảng thời gian nhất định. Ví dụ, bạn có thể cấu hình express-rate-limit để giới hạn 5 yêu cầu đăng nhập từ một địa chỉ IP trong 1 phút. Nếu địa chỉ IP đó vượt quá giới hạn này, nó sẽ bị chặn trong một khoảng thời gian nhất định. Điều này giúp bảo vệ hệ thống khỏi các cuộc tấn công brute-force và đảm bảo an toàn cho người dùng.
Mở trang câu hỏi này →
178Which of the following is used to manage user sessions in Express?4 lựa chọnTrung bình56% trả lời đúng
APassport.js
BCookie-parser
Cbody-parser
DSession-store
Lời giải
Để quản lý các phiên làm việc của người dùng trong Express, chúng ta có thể sử dụng Passport.js. Passport.js là một thư viện phổ biến được sử dụng để thực hiện xác thực và quản lý phiên làm việc của người dùng. Nó cho phép chúng ta sử dụng nhiều phương thức xác thực khác nhau như xác thực bằng tài khoản, xác thực bằng Facebook, Google, v.v. Ngoài ra, Passport.js cũng cung cấp các tính năng như lưu trữ thông tin người dùng, kiểm soát quyền truy cập, v.v. Nói chung, Passport.js là một lựa chọn phổ biến và mạnh mẽ để quản lý phiên làm việc của người dùng trong Express.
Mở trang câu hỏi này →
179Which package is commonly used for JWT authentication in Node.js?4 lựa chọnDễ86% trả lời đúng
Ajwt-node
Bjsonwebtoken
Cauth-token
Dpassport-jwt
Lời giải
Để xác thực JWT (JSON Web Token) trong Node.js, bạn thường sử dụng gói thư viện jsonwebtoken. Gói này cung cấp các phương thức cần thiết để tạo, kiểm tra và giải mã JWT. Nó hỗ trợ các tính năng như tạo token dựa trên thông tin người dùng, kiểm tra token và xác thực người dùng. jsonwebtoken cũng cung cấp các phương thức để tạo token có thời hạn và có thể được sử dụng trong các ứng dụng Node.js.
Mở trang câu hỏi này →
180How would you limit the number of files to 5 in a multiple file upload using Multer?4 lựa chọnTrung bình67% trả lời đúng
Aupload.array('files', 5)
Bupload.single('files', 5)
Cupload.limit(5)
Dupload.multiple('files', 5)
Lời giải
Để 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.
Mở trang câu hỏi này →
Aupload.fields(..)
Bupload.single(..)
Cupload.array(..)
Dupload()
Lời giải
Để tải nhiều tệp tin cùng một lúc với Multer, bạn có thể sử dụng các phương thức sau: upload.fields() và upload.array(). Phương thức upload.fields() cho phép bạn tải nhiều tệp tin với tên khác nhau, trong khi phương thức upload.array() cho phép bạn tải nhiều tệp tin với tên giống nhau. Ví dụ, nếu bạn muốn tải một tệp tin tên là ảnh và một tệp tin tên là file, bạn có thể sử dụng upload.fields() như sau: const upload = multer({ fields: [ { name: 'ảnh', maxCount: 1 }, { name: 'file', maxCount: 1 } ] });. Nếu bạn muốn tải nhiều tệp tin tên là ảnh, bạn có thể sử dụng upload.array() như sau: const upload = multer({ arrayKey: 'ảnh', maxCount: 5 });. Tóm lại, cả hai phương thức upload.fields() và upload.array() đều hỗ trợ tải nhiều tệp tin cùng một lúc với Multer.
Mở trang câu hỏi này →
182What does HTTPS stand for?4 lựa chọnDễ75% trả lời đúng
AHyperText Transfer Protocol Secure
BHyperText Transfer Protocol Simple
CHyperText Transfer Protocol Standard
DHyperText Transfer Protocol Script
Lời giải
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.
Mở trang câu hỏi này →
183What happens if CORS is not properly configured on the server?4 lựa chọnDễ86% trả lời đúng
AThe client receives an error in the browser console
BThe server crashes
CThe client application stops working
DThe server denies all incoming requests
Lời giải
Nếu CORS không được cấu hình đúng trên máy chủ, điều đó có nghĩa là máy chủ không cho phép các yêu cầu từ nguồn khác nhau. Điều này có thể dẫn đến việc trình duyệt của khách hàng nhận được lỗi trong console. Lỗi này thường là do browser không thể gửi yêu cầu đến máy chủ vì nó không được phép. Điều này có thể gây ra sự cố trong việc tải dữ liệu từ máy chủ. Ngoài ra, nếu CORS không được cấu hình đúng, nó có thể dẫn đến việc dữ liệu không được tải đúng cách hoặc dữ liệu bị lỗi. Điều này có thể gây ra sự cố trong việc sử dụng ứng dụng của khách hàng.
Mở trang câu hỏi này →
184What is an SSL certificate?4 lựa chọnDễ86% trả lời đúng
AA digital certificate that authenticates a website's identity and enables an encrypted connection.
BA file that stores user credentials.
CA software that manages database transactions.
DA protocol for transferring files between servers.
Lời giải
SSL (Secure Sockets Layer) chứng chỉ là một loại chứng chỉ số học mật mã học được sử dụng để xác thực danh tính của một trang web và cho phép kết nối mã hóa. Nó giúp đảm bảo rằng thông tin được truyền giữa trang web và người dùng được bảo mật và không bị truy cập trái phép. SSL chứng chỉ thường được sử dụng trong giao tiếp qua internet, chẳng hạn như khi người dùng truy cập vào trang web ngân hàng trực tuyến hoặc khi thực hiện giao dịch trực tuyến khác. Nó giúp tăng cường sự tin cậy và bảo mật cho giao tiếp trực tuyến.
Mở trang câu hỏi này →