Это руководство предполагает:
- У вас работает 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”