[x] В репозитории есть все необходимые инфраструктурные файлы:
[x] в проекте есть package.json;
[x] .editorconfig;
[x] .eslintrc, расширяющий конфигурацию airbnb-base, а также необходимые для работы линтера dev-зависимости;
[x] .gitignore.
[x] в .eslintrc добавлено исключение для _id. Директивы eslint-disable, eslint-disable-line и eslint-disable-next-line запрещены.
Присутствуют блокировки вида eslint-disable.
[x] Нет ошибок линтера. При выполнении команды npx eslint . они должны отсутствовать.
Ошибок не должно быть без блокировок.
[x] В разделе scripts файла package.json есть команды:
[x] npm run start, которая запускает сервер на localhost:3000;
[x] npm run dev, которая запускает сервер на localhost:3000 с хот релоудом.
[x] Описанные роуты работают корректно:
[x] запрос на GET /users/me возвращает информацию о пользователе (email и имя);
[x] PATCH /users/me — обновляет информацию о пользователе;
[x] GET /movies — все сохранённые пользователем фильмы;
[x] POST /movies — создаёт фильм с переданными в теле данными;
[x] DELETE /movies/movieId — удаляет сохранённый фильмы по _id;
При успешном удалении возвращается что-то странное.
[x] POST /signup — создаёт пользователя с переданными в теле данными;
[x] POST /signin — возвращает JWT, если в теле запроса переданы правильные почта и пароль.
[x] Если вы сохраняете JWT в куках, роут /signout должен удалять JWT из куки.
[x] Пользователь не может удалить сохранённый фильм из профиля другого пользователя.
[x] Все роуты, кроме /signin и /signup, защищены авторизацией.
Не защищен роут /signout.
[x] Роуты пользователей и роуты фильмов описаны в отдельных файлах.
[x] Ошибки API обрабатываются:
[x] используются статус-коды ошибок: 400, 401, 403, 404, 409, 500;
[x] если в запросе что-то не так, сервер возвращает статус ответа, который соответствует типу ошибки;
[x] сообщение об ошибке соответсвует ее типу;
1. Неверное сообщение. При попытке авторизироваться с неверными данными нужно сообщать о том, что данные не верны. 2. Неверное сообщение. CastError возникает при невалидном айдишнике. На скриншоте одно из мест в коде. 3. Неверная ошибка. Объяснение в предыдущем пункте.
[x] API не возвращает стандартных ошибок базы данных или Node.js.
[x] Реализовано бережное хранение пароля:
[x] пароль хранится в виде хеша;
[x] API не возвращает хеш пароля клиенту.
[x] Валидация реализована верно:
[x] Запрос валидируется перед передачей контроллеру. Тело и, где необходимо, заголовки и параметры проверяются по соответствующим схемам. Если запрос не соответствует схеме, обработка не передаётся контроллеру, и клиент получает ошибку валидации.
1. Параметр objectId при удалении фильма должен быть обязательным.2. Поле name при регистрации должно быть обязательным.
[x] Данные валидируются перед добавлением в базу.
[x] В production-режиме адрес базы данных берётся из process.env.
[x] К серверу можно обратиться по https по адресу домена, указанному в README.md.
[x] Правильно реализовано хранение секретного ключа для создания JWT:
[x] для продакшн сборки он хранится в .env файле — этот файл не добавляется в git;
[x] в режиме разработки (при process.env.NODE_ENV !== 'production') код запускается и работает и без .env файла.
Приложение не запускается без .env файла. Для режима разработки: отсутствует адрес базы + отсутствует порт + разные секретные ключи для токена.
Хорошие практики
[x] Все роуты подключены в файле index.js, который находится в папке routes. Оттуда единый роут подключается в файле app.js.
Роут 'Страница не найдена' подключен отдельно.
[x] Асинхронные операции реализованы промисами или async/await.
[x] Валидация описана в отдельном модуле.
Валидация описана в роутах.
[x] Настроено логгирование:
[x] запросы и ответы записываются в файл request.log;
Резюме:
Backend
Критерии, влияющие на работоспособность
eslint-disable
.GET /users/me
возвращает информацию о пользователе (email и имя);PATCH /users/me
— обновляет информацию о пользователе;GET /movies
— все сохранённые пользователем фильмы;POST /movies
— создаёт фильм с переданными в теле данными;DELETE /movies/movieId
— удаляет сохранённый фильмы по_id
; При успешном удалении возвращается что-то странное.POST /signup
— создаёт пользователя с переданными в теле данными;POST /signin
— возвращает JWT, если в теле запроса переданы правильные почта и пароль./signout
должен удалять JWT из куки./signout
.2. Неверное сообщение.
CastError
возникает при невалидном айдишнике. На скриншоте одно из мест в коде.3. Неверная ошибка. Объяснение в предыдущем пункте.
objectId
при удалении фильма должен быть обязательным. 2. Полеname
при регистрации должно быть обязательным.Хорошие практики
'Страница не найдена'
подключен отдельно.app.js
.Рекомендации
Количество баллов: 39
Доп. Комментарии:
find
всегда возвращает массив. Если документов в базе нет, то массив пустой.clearCookie
.return null
вauth
./api
для все роутов. Ваш бекэнд ита лежить на поддомене сapi
.