@JadeShopKeeper

TypeError: Cannot read properties of null (reading 'role')?

const User = require('./models/User');
const Role = require('./models/Role');
const bcrypt = require('bcrypt');
class Controller {
  async registration(req, res) {
    try {
      const { username, password } = req.body;
      const candidate = await User.findOne({ username });
      if (candidate) {
        return res.status(400).json({ message: 'such name has been taken' });
      }
      const hashPass = bcrypt.hashSync(password, 3);
      const userRole = await Role.findOne({ role: 'user' });
      const user = new User({ username, hashPass, roles: [userRole.role] });
      await user.save({ message: 'COOL' });
    } catch (e) {
      console.log(e);
      res.status(400).json({ message: 'Registration Error' });
    }
  }

Делаю простую авторизацию но получаю ошибку, не могу найти причину
const { Schema, model } = require('mongoose');

const Role = new Schema({ role: { type: String, default: 'user' } });

module.exports = model('Role', Role);
  • Вопрос задан
  • 170 просмотров
Пригласить эксперта
Ответы на вопрос 2
@wind-of
Проверьте userRole. Возможно, он у вас null.
Ответ написан
Комментировать
neuotq
@neuotq
Прокрастинация
Оу, это печально известная ошибка на миллиард долларов, это если что не про конкретно вашу ошибку, а почему так можно делать.
Здесь вы ищете роль
const userRole = await Role.findOne({ role: 'user' });

Если её нет, то соответвенно в userRole будет null, но далее вы без проверки обращаетесь userRole.role
const user = new User({ username, hashPass, roles: [userRole.role] });

Советую прямо сейчас начать использовать TypeScript, начните с простого пусть это будет проверка типов и отслеживание таких ситуации с возможным null.
Это сэкономит кучу времени и кучу денег, значительно снизит непонятные ошибки на продакшене, которые сложно отловить.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы