Câu hỏi: SDN302 Server-Side development with NodeJS, Express, and MongoDB – Bộ ôn tập cuối kỳ số 3
50 câu trắc nghiệm kèm lời giải của môn Server-Side development with NodeJS, Express, and MongoDB, xếp đúng thứ tự trong đề. Trang 3/3 — câu 41–50.
Danh sách câu hỏi
Đáp án đúng: "{{#
if
}
}
". Handlebarscó sẵn một nhóm block helper gồm if, unless, each, with, cùng các helper lookup và log; block helper được mở bằng dấu thăng ngay sau hai ngoặc nhọn và đóng bằng dấu gạch chéo, nội dung bên trong khối if chỉ hiển thị khi giá trị truyền vào là truthy. "{{loop}}" không phải helper có sẵn; lặp trong Handlebars dùng each. "{{
foreach
}
}
"là cách đặt tên quen thuộc của PHP hay C#, Handlebars không định nghĩa, muốn có phải tự đăng ký bằng Handlebars.registerHelper. "{{logic}}" không tồn tại; Handlebars cố tình hạn chế logic trong template, chỉ cung cấp vài helper điều kiện và lặp đơn giản.
<% users.forEach(user => { %>
<%= user %>
<% }); %>{ users.map(user =>
{user}
) }<%= users.forEach(user => { %>
<%= user %>
<% }); %>Đáp án đúng: "<%
users.forEach(user => {
%> <%= user %> <%
}); %>". EJS phân biệt hai loại thẻ: thẻ <% … %> chỉ chạy mã JavaScript và không in gì, còn thẻ <%= … %> in giá trị của biểu thức sau khi thoát ký tự HTML. Lần theo đoạn mã: dòng đầu mở vòng forEach trên mảng users, dòng giữa in giá trị user ở mỗi lượt lặp, dòng cuối đóng hàm và vòng lặp, nên mỗi tên trong mảng được in một lần (giả sử users chứa tên; nếu là đối tượng thì in user.name). "{
users.map(user => {
user
}) }" là cú pháp JSX của React, EJS không hiểu dấu ngoặc nhọn đơn nên in nguyên văn chuỗi đó ra trang. "<%
users.forEach(user => {
%>{
user
}
<%
}); %>" có vòng lặp đúng nhưng phần giữa nằm ngoài thẻ EJS, nên mỗi lượt chỉ in ra chữ thô { user } thay vì tên. "<%=
users.forEach(user => {
%> <%= user %> <%
}); %>" dùng thẻ in cho dòng mở vòng lặp, EJS sẽ cố biến đoạn chưa đóng đó thành một biểu thức cần in nên khi biên dịch template sẽ báo lỗi cú pháp.
Step 1 is to create a new database reference using client.db('library')
Step 2 is to create a new collection using await db.createCollection('books');
Step 3 is to list all databases using await adminDb.listDatabases();Step 1 is to create a new collection using await db.createCollection('books');
Step 2 is to create a new database reference using client.db('library')
Step 3 is to list all databases using await adminDb.listDatabases();Step 1 is to list all databases using await adminDb.listDatabases();
Step 2 is to create a new collection using await db.createCollection('books');
Step 3 is to create a new database reference using client.db('library')Step 1 is to list all databases using await adminDb.listDatabases();
Step 2 is to create a new database reference using client.db('library')
Step 3 is to create a new collection using await db.createCollection('books');Đáp án đúng: "Step 1 is to create a
new database reference using client.db('library') Step 2 is to create a new collection using await db.createCollection('books');Step 3 is to list all databases using await adminDb.listDatabases(); ". Sau khi client.connect() xong, client.db('library') chỉ tạo một tham chiếu tới cơ sở dữ liệu, MongoDB tạo nó thật khi có collection hoặc dữ liệu đầu tiên; vì vậy phải có tham chiếu db trước thì mới gọi được db.createCollection('books'), và lệnh này làm library thực sự xuất hiện trên máy chủ. Cuối cùng adminDb, lấy từ client.db().admin(), gọi listDatabases() thì danh sách đã có library. Thứ tự mở đầu bằng "Step 1 is to create a new collection" sai vì biến db chưa tồn tại lúc gọi createCollection. Thứ tự "Step 1 is to list all databases using await adminDb.listDatabases(); Step 2 is to create a new collection" vừa liệt kê quá sớm khi library chưa có trong danh sách, vừa tạo collection trước khi có tham chiếu db. Thứ tự "Step 1 is to list all databases using await adminDb.listDatabases(); Step 2 is to create a new database reference" tạo đúng trình tự nhưng liệt kê trước nên không thấy library vừa tạo, trái yêu cầu.