Удалите комментарий

В удалении комментария отсутствует проверка права на конкретный объект. В пагинации ошибка зависит от нумерации: для страниц с единицы 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, исходная формула корректна.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее