Не работают роуты singin singup delete в приложении

Добрый вечер. есть приложение на NODE.js не работают роуты singin и singup delete. приложение лежит на гитхабе и там же задание, сможете помочь найти ошибки кода ?


не могу найти где приложение не работает, толи в автозации, толи в файле секретный ключ
все файла в веттке левел-1

Роуты работают. Возможно у тебя разногласия в коде с длиной пароля (валидация требует длины 8 символов, password: Joi.string().required().min(8),, а в создании пользователя проверяется на длину более 9 символов if (password.length > 9) {.

На будущее описывай какие ты выполняешь действия (например с какими данными пытаешься зарегистрироваться, что используешь чтобы отослать данные) формат постановки вопроса тут Как формулировать вопрос, подсвечивать код, благодарить. Никто в здравом уме не будет затак продираться через горы текста и кода чтобы помочь. Хорошая формулировка будет удобна отвечающему и ты повысишь шансы получить ответ.

Работают signup и signin. Delete не смотрел

при регистрации нового пользователя не добавляет в базу данных, при логине не дает пройти дальше остается на 401.

Покажи серверный стектрейс для попытки регистрации.

Это ответ сервера. А что видно в терминале. Это где запущена npm run dev

Давать логи скриншотом - это издевательство. При придется печатать все имена файлов что я хочу посмотреть, искать глазами. Кидай пожалуйста текстом в следующий раз.

Еще кажется ты показываешь логи не от запроса на /signup потому что ошибка кидается в middleware/auth.js и функция из этого файла не испльзуется в рауте /signup.

Для меня раут signup работает. Так выглядит окно postman-а

при попытке создать пользователя такого же - виснет, должно возвращять ошибку
после логина не могу ничего сделать
пишет что необходима авторизация

the error comes from error handler
SyntaxError: Unexpected token y in JSON at position 0
at JSON.parse ()
at createStrictSyntaxError (D:\max\lesson\diplom-api\node_modules\body-parser\lib\types\json.js:158:10)
at parse (D:\max\lesson\diplom-api\node_modules\body-parser\lib\types\json.js:83:15)
at D:\max\lesson\diplom-api\node_modules\body-parser\lib\read.js:121:18
at invokeCallback (D:\max\lesson\diplom-api\node_modules\raw-body\index.js:224:16)
at done (D:\max\lesson\diplom-api\node_modules\raw-body\index.js:213:7)
at IncomingMessage.onEnd (D:\max\lesson\diplom-api\node_modules\raw-body\index.js:273:7)
at IncomingMessage.emit (events.js:327:22)
at endReadableNT (_stream_readable.js:1201:12)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
expose: true,
statusCode: 400,
status: 400,
body: ‘yilia’,
type: ‘entity.parse.failed’
}
the error comes from error handler
ErrorAuth: Доступ запрещен. Необходима авторизация
at auth (D:\max\lesson\diplom-api\middlewares\auth.js:9:11)
at Layer.handle [as handle_request] (D:\max\lesson\diplom-api\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:317:13)
at D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:284:7
at Function.process_params (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:335:12)
at next (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:275:10)
at expressInit (D:\max\lesson\diplom-api\node_modules\express\lib\middleware\init.js:40:5)
at Layer.handle [as handle_request] (D:\max\lesson\diplom-api\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:317:13)
at D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:284:7
at Function.process_params (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:335:12)
at next (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:275:10)
at query (D:\max\lesson\diplom-api\node_modules\express\lib\middleware\query.js:45:5)
at Layer.handle [as handle_request] (D:\max\lesson\diplom-api\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:317:13)
at D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:284:7 {
statusCode: 401
}
the error comes from error handler
ErrorAuth: Доступ запрещен. Необходима авторизация
at auth (D:\max\lesson\diplom-api\middlewares\auth.js:9:11)
at Layer.handle [as handle_request] (D:\max\lesson\diplom-api\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:317:13)
at D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:284:7
at Function.process_params (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:335:12)
at next (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:275:10)
at expressInit (D:\max\lesson\diplom-api\node_modules\express\lib\middleware\init.js:40:5)
at Layer.handle [as handle_request] (D:\max\lesson\diplom-api\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:317:13)
at D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:284:7
at Function.process_params (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:335:12)
at next (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:275:10)
at query (D:\max\lesson\diplom-api\node_modules\express\lib\middleware\query.js:45:5)
at Layer.handle [as handle_request] (D:\max\lesson\diplom-api\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:317:13)
at D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:284:7 {
statusCode: 401
}

Asus@DESKTOP-C6CHCA8 MINGW64 /d/max/lesson/diplom-api
$ npm run dev

diplomt@1.0.1 dev D:\max\lesson\diplom-api
nodemon app.js

[nodemon] 2.0.2
[nodemon] to restart at any time, enter rs
[nodemon] watching dir(s): .
[nodemon] watching extensions: js,mjs,json
[nodemon] starting node app.js
the error comes from error handler
ErrorAuth: Доступ запрещен. Необходима авторизация
at auth (D:\max\lesson\diplom-api\middlewares\auth.js:9:11)
at Layer.handle [as handle_request] (D:\max\lesson\diplom-api\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:317:13)
at D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:284:7
at Function.process_params (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:335:12)
at next (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:275:10)
at expressInit (D:\max\lesson\diplom-api\node_modules\express\lib\middleware\init.js:40:5)
at Layer.handle [as handle_request] (D:\max\lesson\diplom-api\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:317:13)
at D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:284:7
at Function.process_params (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:335:12)
at next (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:275:10)
at query (D:\max\lesson\diplom-api\node_modules\express\lib\middleware\query.js:45:5)
at Layer.handle [as handle_request] (D:\max\lesson\diplom-api\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:317:13)
at D:\max\lesson\diplom-api\node_modules\express\lib\router\index.js:284:7 {
statusCode: 401
}

Давай разбираться с 1 проблемой в 1 присест. Мы выяснили что signup работает для корректных данных. Так? Дальше

Код создания пользователя:

const createUser = async (req, res, next) => {
  const { email, password, name } = req.body;
  try {
    const hash = await bcrypt.hash(password.trim(), 10);
    await User.create({
      email: email.trim(),
      password: hash,
      name: name.trim(),
    });
      res.status(201).send(SUCCESSFUL_AUTH);
  } catch (next) {}
};

обрати внимание что нет кода для обработки ошибки. Если код попадает в выполнение в ветку catch, то не вызывается ни next ни res, следовательно не отдается ответ на запрос. Надо бы так:

const createUser = async (req, res, next) => {
  const { email, password, name } = req.body;
  try {
    const hash = await bcrypt.hash(password.trim(), 10);
    await User.create({
      email: email.trim(),
      password: hash,
      name: name.trim(),
    });
      res.status(201).send(SUCCESSFUL_AUTH);
  } catch (err) {
    next(err)
  }
};

У меня авторизация по signin не срабатывает из-за рантайм ошибки.

const login = (req, res) => {
  const { email, password } = req.body;
  return User.findUserByCredentials(email, password)
    .then((user) => {
      const token = jwt.sign({ _id: user._id }, jwtSecret, { expiresIn: '7d' });

jwtSecret нигде не определена в коде. Запускаю код из ветки level-1.

лог:

➜  diplom-api git:(level-1) ✗ npm run dev

> diplomt@1.0.1 dev /Users/dp/Desktop/diplom-api
> nodemon app.js

[nodemon] 2.0.2
[nodemon] to restart at any time, enter `rs`
[nodemon] watching dir(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node app.js`
{ DB: 'mongodb://localhost:27017/news-api', SERVER_PORT: 3000 }
(node:45711) UnhandledPromiseRejectionWarning: ReferenceError: jwtSecret is not defined
    at /Users/dp/Desktop/diplom-api/controllers/users.js:59:49
(node:45711) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:45711) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

postman

Это какой-то “левый” лог, или у тебя другая версия кода по сравнению с моей (я смотрю в ветку level-1 или ты прикладываешь левый скришнот постмена. Левый по той же причине что я написал выше: ошибка кидается в diplom-api\middlewares\auth.js:9:11, но по коду эта функция не используется для раута signup, работу с которым я вижу на скриншоте постмена.

вот и я не понимаю как проверять? у меня вот так а у ревьювера подругому

Запакуй в zip всю папку как она есть сейчас и скинь через https://send.firefox.com/

Скорее всего у тебя не тот код что у меня

https://send.firefox.com/download/8faedd73c3d767f3/#kw_IbhIE8rFjMIyHszBRPA
вот точная ссылка, там все кроме модулей, модули я устанавливал командой “npm i”