В удалении комментария отсутствует проверка права на конкретный объект. В пагинации ошибка зависит от нумерации: для страниц с единицы start должен быть (page − 1) × pageSize.
Удалите комментарий
В удалении комментария отсутствует проверка права на конкретный объект. В пагинации ошибка зависит от нумерации: для страниц с единицы start должен быть (page − 1) × pageSize.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Удалите комментарий
app.delete('/comments/:id', requireAuth, async (req, res) => { const comment = await db.comments.findById(req.params.id) if (!comment) { return res.status(404).end() } await db.comments.delete(comment.id) res.status(204).end() })
Пагинация списка
function paginate<T>(items: T[], page: number, pageSize: number): T[] { const start = page * pageSize const end = start + pageSize return items.slice(start, end) }
Ответ
В удалении комментария отсутствует проверка права на конкретный объект. В пагинации ошибка зависит от нумерации: для страниц с единицы start должен быть (page − 1) × pageSize.
requireAuth подтверждает вход, но не владение комментарием. Перед удалением нужна policy владельца/модератора; операцию лучше ограничить теми же условиями доступа в запросе БД. При cookie-аутентификации также нужна CSRF-защита.
Пагинация с явно выбранной нумерацией от единицы:
function paginate<T>(items: T[], page: number, pageSize: number): T[] {
if (!Number.isSafeInteger(page) || page < 1 ||
!Number.isSafeInteger(pageSize) || pageSize < 1) {
throw new RangeError('Invalid pagination');
}
const start = (page - 1) * pageSize;
return items.slice(start, start + pageSize);
}
Если контракт изначально использует страницу 0, исходная формула корректна.