Рубрики
Без рубрики

Создание системы миграции Mongodb для Nestjs с мангустом

Этот урок предполагает: у вас есть рабочий проект NESTJS, который вы используете MongoDB и … Теги с узлом, MongoDB, JavaScript, Nestjs.

Это руководство предполагает:

  • У вас работает Project Pestjs Project
  • Вы используете Mongodb и Mongoose

В недавнем прошлом у меня было желание сделать немного рефакторинга в моей игре Discord. Все еще работа в прогрессе, но я не мог больше, тем факт, что дома были названы домами … Я уже могу услышать вас: «Просто измените этикетки, не отображали никого ухода!».

Я забочусь о согласованности именования в моих кодовых базах. Если дома – это дома, то следующее, что вы знаете, это: каноны станут деревянными мечами, а волки собаки …

Я провел некоторое время онлайн в поисках решений, и я наконец-то построил что-то, что мне нравится. Позвольте мне представить вам результат моей работы.

Я решил использовать мигрировать Библиотека, поскольку она является агностикой базы данных, предлагает легкую логику вверх/вниз и может сохранить статус миграции в любой форме.

Достаточно говорить обо мне, позвольте мне вести вас через это путешествие.

Установить миграцию

Иди установите плохого парня!

npm i --save migrate

Создайте папку для хранения ваших миграций!

Вы будете новыми двумя папками:

mkdir src/migrations
mkdir src/migrations-utils

Первый будет хранить сценарии обновления, и в секунды будут храниться некоторые утилиты. Давайте посмотрим в секунды.

Некоторые маленькие помощники

Во вступлении я сказал вам, что миграция – это база данных агностики. Поэтому вам нужно написать маленький разъем MongoDB:

import { MongoClient } from 'mongodb';
import { configs } from '../config/configuration';

const MONGO_URL = configs.mongoUrl;

export const getDb = async () => {
  const client: any = await MongoClient.connect(MONGO_URL, { useUnifiedTopology: true });
  return client.db();
};

Ницца! Давайте продолжим.

Миграция – это инструмент, сделанный в JavaScript. И мы используем Teadncript, Лучшее, что нужно сделать, это иметь небольшой шаблон с базой данных, уже подключенной.

import { getDb } from '../migrations-utils/db';

export const up = async () => {
  const db = await getDb();
  /*
      Code your update script here!
   */
};

export const down = async () => {
  const db = await getDb();
  /*
      Code you downgrade script here!
   */
};

У меня были проблемы с Ts-Node/Регистрация В миграции командной строки. Этот маленький помощник решил мои ошибки трансигации! Делать то же самое! Теперь! сделай это!

// eslint-disable-next-line @typescript-eslint/no-var-requires
const tsNode = require('ts-node');
module.exports = tsNode.register;

Обновить Package.json.

Пришло время обновить package.json вашего проекта, чтобы простые в использовании скрипты на будущее!

Скрипт для генерации файлов миграции

Добавьте эту сладкую линию в package.json , в разделе сценария!

"migrate:create": "migrate create --template-file ./src/migrations-utils/template.ts --migrations-dir=\"./src/migrations\" --compiler=\"ts:./src/migrations-utils/ts-compiler.js\"",

-tumemplate-file ./src/migrations-utils/template.ts Укажите файл шаблона, это необходимую вещь, поскольку мы находимся в типографическом репо. Это также дает вам простой способ загрузить миграцию так, как вам это нравится!

- ГИГРИСАЦИЯ - Dir = \ "./SRC/миграции \" Расскажите мигрировать, где хранятся ваши миграционные сценарии. По умолчанию это в корне проекта.

--compiler = \ "TS: ./SRC/Migrations-usils/TS-Compiler.js \" Объясните, чтобы мигрировать как обрабатывать файлы Tearscript.

Теперь вам просто нужно запустить эту команду, чтобы создать пустой файл миграции TypeScript в правильной папке!

npm run migrate:create -- 

Скрипт для обновлений и сценарий понижений

Aaaaaaand еще две линии в package.json , снова в разделе сценариев!

"migrate:up": "migrate --migrations-dir=\"./src/migrations\" --compiler=\"ts:./src/migrations-utils/ts-compiler.js\" up",
"migrate:down": "migrate --migrations-dir=\"./src/migrations\" --compiler=\"ts:./src/migrations-utils/ts-compiler.js\" down"

Здесь нет новых вариантов, я уже объяснил их, но освежаю это приятно.

- ГИГРИСАЦИЯ - Dir = \ "./SRC/миграции \" Рассказывает мигрировать, где найти миграцию!

--compiler = \ "TS: ./SRC/Migrations-usils/TS-Compiler.js \" Рассказывает миграцию, как обрабатывать Teadncript …

Теперь вы можете запустить сценарий обновления: NPM запустить мигрировать: вверх или понизить сценарий NPM беги мигрировать: вниз

Что произойдет, когда вы запускаете миграцию?

Migrate будет хранить ваше состояние миграции в файле в Project Root. Этот файл называется Migrate.json Отказ Похоже, это выглядит:

{
  "lastRun": "1605197159478-test.ts",
  "migrations": [
    {
      "title": "1605197159478-test.ts",
      "timestamp": 1605197181474
    }
  ]
}

Не совершать мигрировать.json

Вопросы?

Я буду рад отвечать на вопросы в комментариях.

Если вам понравился мой раздор, рассмотрите возможность присоединиться к моим кодированию логов! ☎ Webeleon Кодирование логова на Discord

Вы также можете написать мне и предложить мне договор 💰 ✉️ Напишите мне!

А поскольку я хороший парень, здесь, возьми этот пример репо, содержащий рабочий кодовой база! 🎁 Получите код TUTO из GitHub

Документация

Оригинал: “https://dev.to/webeleon/building-a-mongodb-migration-system-for-nestjs-with-mongoose-4fbj”