MEAN Stack: Модели пользователей в MongoDB

Хранение данных пользователей в MongoDB

При регистрации пользователей необходимо получать их данные и помещать их в базу данных MongoDB. MongoDB — база данных, хранящая элементы в формате объектов. Добавление нового элемента — добавление нового объекта.

Создание модели пользователя

Создадим модель, описывающую объект «пользователь». Модель будет содержать поля (email, имя, пароль и т.д.) и функции для работы с базой данных (добавление, получение данных пользователя).

Структура проекта и подключение библиотек

Модели храним в папке models. Создадим файл user.js в этой папке. Подключим необходимые библиотеки:

  • mongoose — для работы с базой данных MongoDB.
  • bcrypt — для хеширования паролей.
  • Конфигурационный файл db из папки config (путь: ../config/db).

Описание схемы модели

Схема описывает поля, ожидаемые от пользователя. Создадим схему с помощью mongoose.Schema:

const userSchema = new mongoose.Schema({
  name: { type: String },
  email: { type: String, required: true },
  login: { type: String, required: true },
  password: { type: String, required: true }
});

Экспортируем схему с помощью module.exports:

module.exports = mongoose.model('User', userSchema);

Добавление функций в модель

Добавим функции:

  • getUserByLogin: получение пользователя по логину.
  • getUserById: получение пользователя по ID.
  • addUser: добавление пользователя в базу данных.
module.exports.getUserByLogin = function(login, callback) {
  const query = { login: login };
  User.findOne(query, callback);
};

module.exports.getUserById = function(id, callback) {
  User.findById(id, callback);
};

module.exports.addUser = function(newUser, callback) {
  bcrypt.genSalt(10, (err, salt) => {
    bcrypt.hash(newUser.password, salt, (err, hash) => {
      if (err) throw err;
      newUser.password = hash;
      newUser.save(callback);
    });
  });
};

Функция addUser хеширует пароль пользователя перед сохранением в базу данных с использованием библиотеки bcrypt.

Реализация функции регистрации пользователя в account.js

В файле account.js реализуем функцию обработки данных формы регистрации методом POST:

const User = require('../models/user');

// ... другой код ...

router.post('/register', (req, res) => {
  let newUser = new User({
    name: req.body.name,
    email: req.body.email,
    login: req.body.login,
    password: req.body.password
  });

  User.addUser(newUser, (err, user) => {
    if (err) {
      res.json({ success: false, msg: 'Пользователь не был добавлен' });
    } else {
      res.json({ success: true, msg: 'Пользователь был добавлен!' });
    }
  });
});

// ... другой код ...

Этот код принимает данные из формы, создает объект пользователя и использует функцию addUser из модели для добавления пользователя в базу данных. Ответ отправляется в формате JSON, указывая на успех или неудачу операции.

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

Что будем искать? Например,программа