Ответ
Сиды (Seeds) — это скрипты для заполнения базы данных предопределёнными (начальными) данными. В Node.js-проектах они используются вместе с миграциями для приведения базы данных в предсказуемое состояние, необходимое для работы приложения.
Зачем они нужны в Node.js проекте?
- Наполнение справочными данными: Роли пользователей (
admin,user), типы подписок, список стран, категории товаров. - Создание тестовых данных: Для разработки, демо-стендов или наполнения staging-окружения.
- Добавление обязательных записей: Учётная запись супер-администратора, настройки по умолчанию.
Пример сида с использованием Knex.js (популярный SQL query builder для Node.js):
// seeds/01_initial_roles.js
exports.seed = async function(knex) {
// Deletes ALL existing entries
await knex('user_roles').del();
// Inserts seed entries
return knex('user_roles').insert([
{ id: 1, name: 'admin', description: 'Full system access' },
{ id: 2, name: 'moderator', description: 'Can manage content' },
{ id: 3, name: 'user', description: 'Regular user' },
]);
};
Запуск: npx knex seed:run
Пример сида для создания тестового пользователя с хешированным паролом (используя bcrypt):
// seeds/02_demo_users.js
const bcrypt = require('bcrypt');
exports.seed = async function(knex) {
const saltRounds = 10;
const hashedPassword = await bcrypt.hash('demo123', saltRounds);
return knex('users').insert([
{
email: 'admin@example.com',
password_hash: hashedPassword,
role_id: 1, // Ссылается на роль 'admin' из предыдущего сида
is_active: true,
created_at: knex.fn.now()
}
]);
};
Best Practices в Node.js:
- Идемпотентность: Сиды должны безопасно выполняться многократно. Часто начинаются с очистки таблиц (
del()илиtruncate()). - Порядок выполнения: Важен из-за внешних ключей. Сиды для справочных таблиц (роли) должны выполняться перед сидами, которые на них ссылаются (пользователи).
- Не для продакшена: Как правило, сиды с тестовыми данными не запускаются на production. Для обязательных справочных данных иногда используют миграции или отдельные скрипты деплоя.
- Использование с ORM: Аналогичная логика работает с Sequelize, TypeORM и другими библиотеками.