Datenbankmigrationen in Node.js: Überblick über Tools und Beispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Datenbankmigrationen in JavaScript (Node.js): Tools und Praxis

\n\n

Die Entwicklung moderner Webanwendungen mit Node.js kommt selten ohne die Arbeit mit Datenbanken aus. Mit dem Wachstum des Projekts ändern sich Tabellenstrukturen, Indizes und Beziehungen unweigerlich. Das manuelle Ausführen von SQL-Skripten auf dem Server führt zu Chaos und Fehlern. Die Lösung dieses Problems sind Datenbankmigrationen (database migrations). Dies ist ein Mechanismus zur Versionierung von Schemaänderungen, der es dem Entwicklerteam ermöglicht, die Datenbankstruktur synchron und sicher zu aktualisieren.

\n\n

Im JavaScript-Ökosystem gibt es mehrere ausgereifte Tools für die Arbeit mit Migrationen. Betrachten wir drei Schlüsselansätze am Beispiel beliebter Bibliotheken.

\n\n

1. Knex.js – universeller Query Builder

\n\n

Knex.js ist nicht nur ein SQL-Builder, sondern auch ein vollwertiges Tool für Migrationen und Seeding (Befüllen mit Testdaten). Es unterstützt PostgreSQL, MySQL, SQLite und andere DBMS. Der Hauptvorteil: Sie schreiben Migrationen in JavaScript, und Knex übersetzt sie in den Dialekt der jeweiligen Datenbank.

\n\n

Installation und Konfiguration

\n
npm install knex\nnpm install pg  # für PostgreSQL
\n\n

Erstellen Sie eine Konfigurationsdatei knexfile.js:

\n
module.exports = {\n  development: {\n    client: 'pg',\n    connection: {\n      host: 'localhost',\n      user: 'user',\n      password: 'pass',\n      database: 'mydb'\n    },\n    migrations: {\n      directory: './migrations'\n    }\n  }\n};
\n\n

Erstellen und Ausführen einer Migration

\n

Erstellen wir eine Migration für die Benutzertabelle:

\n
npx knex migrate:make create_users_table
\n\n

Im Ordner migrations erscheint eine Datei mit einem Zeitstempel. Bearbeiten wir sie:

\n
exports.up = function(knex) {\n  return knex.schema.createTable('users', (table) => {\n    table.increments('id').primary();\n    table.string('username', 100).notNullable().unique();\n    table.string('email').notNullable();\n    table.timestamps(true, true); // created_at und updated_at\n  });\n};\n\nexports.down = function(knex) {\n  return knex.schema.dropTableIfExists('users');\n};
\n\n

Wenden Sie die Migration an:

\n
npx knex migrate:latest
\n\n

Rückgängig machen der letzten Migration:

\n
npx knex migrate:rollback
\n\n

Knex erlaubt auch die Ausführung von reinem SQL innerhalb von Migrationen, falls eine spezifische Logik erforderlich ist.

\n\n

2. Sequelize – ORM mit leistungsstarkem Migrationssystem

\n\n

Sequelize ist ein beliebtes ORM für Node.js, das PostgreSQL, MySQL, MariaDB, SQLite und MSSQL unterstützt. Seine CLI bietet praktische Befehle zum Generieren und Verwalten von Migrationen, die eng mit Modellen integriert sind.

\n\n

Erste Schritte

\n
npm install sequelize sequelize-cli pg\nnpx sequelize-cli init
\n\n

Erstellen Sie ein Modell und eine Migration mit einem Befehl:

\n
npx sequelize-cli model:generate --name User --attributes username:string,email:string
\n\n

Dies generiert zwei Dateien: das Modell models/user.js und eine Migration in migrations/. Beispiel einer Migration:

\n
'use strict';\nmodule.exports = {\n  up: async (queryInterface, Sequelize) => {\n    await queryInterface.createTable('Users', {\n      id: {\n        allowNull: false,\n        autoIncrement: true,\n        primaryKey: true,\n        type: Sequelize.INTEGER\n      },\n      username: {\n        type: Sequelize.STRING(100),\n        allowNull: false,\n        unique: true\n      },\n      email: {\n        type: Sequelize.STRING,\n        allowNull: false\n      },\n      createdAt: {\n        allowNull: false,\n        type: Sequelize.DATE\n      },\n      updatedAt: {\n        allowNull: false,\n        type: Sequelize.DATE\n      }\n    });\n  },\n  down: async (queryInterface, Sequelize) => {\n    await queryInterface.dropTable('Users');\n  }\n};
\n\n

Anwenden und Rückgängig machen:

\n
npx sequelize-cli db:m                    

Empfehlungen