Многе веб апликације морају да користе базу података за чување корисничких детаља или преференција. Али да ли сте знали да у сваком модерном веб претраживачу постоји уграђена база података?

ИндекедДБ је НоСКЛ база података на страни клијента која вам омогућава да складиштите и преузимате структуриране податке унутар веб претраживача корисника.

ИндекедДБ пружа неколико предности, као што је већа меморија и ванмрежно складиштење и преузимање података у односу на друге опције складиштења, као што је лоцалСтораге. Овде ћете научити како да користите ИндекедДБ као базу података.

Подешавање ваше базе података

Да бисте креирали базу података, морате да креирате отворени захтев користећи ИндекедДБ отворен методом. Тхе отворен метода враћа ан ИДБОпенДБРекуест објекат. Овај објекат омогућава приступ успех, грешка, и потребно је надоградитиемитовани догађаји из отворене операције.

Тхе отворен метода узима два аргумента: име и опциони број верзије. Аргумент наме представља име ваше базе података. Број верзије одређује верзију базе података са којом ваша апликација очекује да ради. Подразумевана вредност је нула.

instagram viewer

Ево како да направите отворени захтев:

конст опенРекуест = индекедДБ.опен("усерсдб", 1);

Након креирања отвореног захтева, потребно је да слушате и управљати догађајима на враћеном објекту.

Тхе успех догађај се дешава када успешно креирате базу података. Када се емитује, добијате приступ свом објекту базе података преко евент.таргет.ресулт:

опенРекуест.онсуццесс = функција (догађај) {
конст дб = евент.таргет.ресулт;
конзола.Пријава(„База података креирана“, дб);
};

Горњи пример обрађује догађај успеха евидентирањем објекта базе података.

Тхе грешка догађај се дешава ако ИндекедДБ наиђе на проблем током креирања базе података. Можете то да решите тако што ћете евидентирати грешку на конзоли или користити други методе за руковање грешкама:

опенРекуест.онеррор = функција (догађај) {
// ...
};

Тхе потребно је надоградити догађај се дешава када први пут креирате базу података или када ажурирате њену верзију. Пали се само једном, што га чини идеалним местом за креирање продавнице објеката.

Креирање продавнице објеката

Складиште објеката је слично табели у релационим базама података на страни сервера. Можете користити складиште објеката за чување парова кључ-вредност.

Требало би да креирате складишта објеката као одговор на потребно је надоградити догађај. Овај догађај се покреће када креирате нову верзију базе података или надоградите постојећу верзију. Ово осигурава да је база података исправно конфигурисана и ажурна пре него што додате било какве податке.

Можете креирати складиште објеката користећи цреатеОбјецтСторе метод, којем можете приступити на референци ваше базе података. Овај метод узима име складишта објеката и објекат конфигурације као аргументе.

У објекту конфигурације морате дефинисати примарни кључ. Можете дефинисати примарни кључ тако што ћете дефинисати путању кључа, што је својство које увек постоји и садржи јединствену вредност. Алтернативно, можете користити генератор кључева тако што ћете поставити кеиПатх својство на „ид” и тхе аутоИнцремент власништво до истина у вашем конфигурационом објекту.

На пример:

опенРекуест.онупграденеедед = функција (догађај) {
конст дб = евент.таргет.ресулт;

// Креирајте складиште објеката
конст усерОбјецтСторе = дб.цреатеОбјецтСторе("усерСторе", {
кеиПатх: "ид",
аутоинкремент: истина,
});
}

Овај пример креира складиште објеката под називом „усерСторе“ у вашој бази података и поставља његов примарни кључ на ИД који се аутоматски повећава.

Дефинисање индекса

У ИндекедДБ, индекс је начин за ефикасније организовање и преузимање података. Ово вам омогућава да претражујете складиште објеката и сортирате га на основу индексираних својстава.

Да бисте дефинисали индекс на складишту објеката, користите цреатеИндек() метода објекта складишта објеката. Овај метод узима име индекса, име својства и конфигурациони објекат као аргументе:

усерОбјецтСторе.цреатеИндек("име", "име", { јединствени: лажно });
усерОбјецтСторе.цреатеИндек("е-пошта", "е-пошта", { јединствени: истина });

Овај блок кода изнад дефинише два индекса, "име" и "е-маил" на усерОбјецтСторе. Индекс „име“ није јединствен, што значи да више објеката може имати исту вредност имена, док је индекс „е-поште“ јединствен, осигуравајући да ниједан објекат не може имати исту вредност е-поште.

Ево потпуног примера како можете да се носите са потребно је надоградити догађај:

опенРекуест.онупграденеедед = функција (догађај) {
конст дб = евент.таргет.ресулт;

// Креирајте складиште објеката
конст усерОбјецтСторе = дб.цреатеОбјецтСторе("усерСторе", {
кеиПатх: "ид",
аутоинкремент: истина,
});

// Креирајте индексе
усерОбјецтСторе.цреатеИндек("име", "име", { јединствени: лажно });
усерОбјецтСторе.цреатеИндек("е-пошта", "е-пошта", { јединствени: истина });
};

Додавање података у ИндекедДБ

Трансакција у ИндекедДБ је начин да се групише више операција читања и писања у једну операцију. Да би се обезбедила конзистентност и интегритет података, ако једна од операција унутар трансакције не успе, ИндекедДБ враћа све операције уназад.

Да бисте додали податке у ИндекедДБ базу података, потребно је да креирате трансакцију у складишту објеката у коју желите да додате податке, а затим да користите додати() метод на трансакцију за додавање података.

Можете креирати трансакцију тако што ћете позвати трансакција метод на вашем објекту базе података. Овај метод узима два аргумента: назив(а) вашег складишта података и начин трансакције, који може бити само за читање (подразумевано) или реадврите.

Затим позовите објецтСторе() метод на трансакцију и проследите име складишта објеката у коју желите да додате податке. Овај метод враћа референцу на складиште објеката.

Коначно, позовите додати() метод на складишту објеката и проследите податке које желите да додате:

конст аддУсерДата = (усерДата, дб) => {
// Отворите трансакцију
конст трансакција = дб.трансацтион("усерСторе", "читај пиши");

// Додавање података у складиште објеката
конст усерОбјецтСторе = трансакција.објецтСторе("усерСторе");

// Направите захтев за додавање корисничких података
конст захтев = усерОбјецтСторе.адд (усерДата);

// Руковање успешним догађајем
рекуест.онсуццесс = функција (догађај) {
//...
};

// Обради грешку
рекуест.онеррор = функција (догађај) {
//...
};
};

Ова функција креира трансакцију са складиштем објеката "усерСторе" и поставља режим на "реадврите". Затим добија складиште објеката и додаје кориснички подаци на то користећи додати методом.

Преузимање података из ИндекедДБ

Да бисте преузели податке из ИндекедДБ базе података, потребно је да креирате трансакцију у складишту објеката из које желите да преузмете податке, а затим да користите добити() или узми све() метод на трансакцију за преузимање података у зависности од количине података коју желите да преузмете.

Тхе добити() метода узима вредност за примарни кључ објекта који желите да преузмете и враћа објекат са одговарајућим кључем из вашег складишта објеката.

Тхе узми све() метода враћа све податке у складишту објеката. Такође узима опционо ограничење као аргумент и враћа све подударне податке из продавнице.

конст гетУсерДата = (ид, дб) => {
конст трансакција = дб.трансацтион("усерСторе", "само за читање");
конст усерОбјецтСторе = трансакција.објецтСторе("усерСторе");

// Направите захтев за добијање података
конст захтев = усерОбјецтСторе.гет (ид);

рекуест.онсуццесс = функција (догађај) {
конзола.лог (рекуест.ресулт);
};

рекуест.онеррор = функција (догађај) {
// Грешка руковања
};
};

Ова функција креира трансакцију са складиштем објеката "усерСторе" и поставља режим на "само за читање". Затим преузима корисничке податке са одговарајућим ИД-ом из складишта објеката.

Ажурирање података помоћу ИндекедДБ

Да бисте ажурирали податке у ИндекедДБ-у, потребно је да креирате трансакцију са режимом „читања писања“. Наставите тако што ћете преузети објекат који желите да ажурирате помоћу добити() методом. Затим измените објекат и позовите ставити() метод на складишту објеката да сачувате ажурирани објекат назад у базу података.

конст упдатеУсерДата = (ид, кориснички подаци, дб) => {
конст трансакција = дб.трансацтион("усерСторе", "читај пиши");
конст усерОбјецтСторе = трансакција.објецтСторе("усерСторе");

// Направите захтев за добијање података
конст гетРекуест = усерОбјецтСторе.гет (ид);

// Руковање успешним догађајем
гетРекуест.онсуццесс = функција (догађај) {
// Добити старе корисничке податке
конст корисник = евент.таргет.ресулт;

// Ажурирај корисничке податке
усер.наме = усерДата.наме;
усер.емаил = усерДата.емаил;

// Направите захтев за ажурирање података
конст путРекуест = усерОбјецтСторе.пут (корисник);

путРекуест.онсуццесс = функција (догађај) {
// Руковати успехом
};

путРекуест.онеррор = функција (догађај) {
// Грешка руковања
};
};

гетРекуест.онеррор = функција (догађај) {
// Грешка руковања
};
};

Ова функција креира трансакцију за добијање и ажурирање података ваше базе података.

Брисање података из ИндекедДБ

Да бисте избрисали податке из ИндекедДБ-а, потребно је да креирате трансакцију са режимом „читања писања“. Затим позовите делете() метод на складишту објеката за уклањање објекта из базе података:

конст делетеУсерДата = (ид, дб) => {
конст трансакција = дб.трансацтион("усерСторе", "читај пиши");
конст усерОбјецтСторе = трансакција.објецтСторе("усерСторе");

// Направите захтев за брисање података
конст захтев = усерОбјецтСторе.делете (ид);

рекуест.онсуццесс = функција (догађај) {
// Руковати успехом
};

рекуест.онеррор = функција (догађај) {
// Грешка руковања
};
};

Ова функција креира трансакцију која брише податке са одговарајућим ИД-ом из вашег складишта објеката.

Да ли треба да користите ИндекедДБ или лоцалСтораге?

Избор између ИндекедДБ и других база података на страни клијента, као што је лоцалСтораге, зависи од захтева ваше апликације. Користите лоцалСтораге за једноставно складиштење малих количина података. Изаберите ИндекедДБ за велике структуриране скупове података који захтевају упите и филтрирање.