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