Cum se utilizează un orm în nod.js

logo nod.js

în acest blog Voi vorbi despre un pic despre Oms, beneficiile lor (pro) și limitările (Contra), care este sechiderea și cum să o utilizați.

Maparea obiectului-relațional

este a Tehnica de conversie a datelor între sistemul de tipuri de limbi de programare și baza de date. După cum indică numele acestuia, acest lucru este adresat numai bazei de date relaționale (SQL). Acest lucru creează un efect „Obiect de bază de date virtuală” pe baza de date relațională, acest efect este ceea ce ne permite să manipulăm baza de date prin codul.

Object – Referință la / Obiectul (obiectele) pe care îl putem folosi Limbajul nostru.

Relational – se referă la sistemul nostru de manager de baze de date (MySQL, MSSQL, POSTGRESQL).

Maparea – referința se face referire la conexiunea dintre obiecte și tabele. /p>

TL; DR ORM este o tehnică care ne permite să facem întrebări și să manipulați datele din baza de date dintr-un limbaj de programare.

Pro

  • Rezumat: Designul unei structuri sau model izolat din baza de date.
  • Portable: vă permite să transportați structura orrmului dvs. Ormms.
  • Data cuibării: În cazul în care un tabel are una sau mai multe relații cu ceilalți.

con / h4>

lent: Dacă comparați timpul de răspuns între o interogare brută și o interogare făcută de Obiectele, interogarea brută este mult mai rapidă, deoarece nu există nici un strat (cartografiere).

  • Complexitate: Uneori va trebui să facem interogări complexe, o sechidere din fericire vă permite să rulați interogări brut.
  • care este sechelela?

    Sechizele este un orm bazat pe promisiuni pentru nod.js. Sprijină PostgreSQL, MySQL, Sqlite și MSSQL și oferă caracteristici solide ale tranzacțiilor, relațiile dintre tabele, mecanismele de migrare și încărcarea datelor și multe altele.

    pentru că am decis să folosesc secvența?

    Sechize se ocupă de obiectele dvs. ca promisiuni, ceva care merge mână în mână cu bucla de eveniment de nod.js.

    acum vă voi arăta cum să creați și să migrați mesele, încărcați date și modul în care consultați aceste date. Dacă doriți să verificați codul, îl puteți clona de aici.

    cerințe

    • nod.js 8.0 +
    • mysql 5.7 +

    Vom instala mai întâi modulul Sechelii-CLI:

     NPM i -G Sequelize-CLI 

    Apoi Vom crea un dosar în care conține aplicația noastră, vom crea un fișier JS și vom instala sechelele și dialect (în acest caz MySQL):

     Mkdir HowTo -Sequelize & & CD HOWTO-Sequelizetouch Index.jsnpm init -Ynpm I -s Sechelii MySQL2 

    Acum noi trebuie să înceapă proiectul cu sequelize-cli:

     sechelii init 

    Sequelize-CLI a creat o structură de bază la rădăcina proiectului nostru:

    Dacă revizuim fișierul ./config/config.json, vedem că avem 3 opțiuni de conectare la o bază de date, Să modificăm opțiunea „Dezvoltare”:

     "Dezvoltare": {"Nume de utilizator": "Root", "Parola": "Tucontaseña", "Baza de date": "HOWTO-Sequerize", "Host": "127.0.0.1" "Dialect": "MySQL" , "Operatorsaliase": false ", dialectoptions": {"charset": "UTF8MB4"}, "logging": TRUE, "Benchmark": TRUE} 

    Acum examinați fișierul ./models/index. JS. Acest fișier are o funcție pentru a crea o nouă instanță de sechestru de fiecare dată când se numește și are ca o variabilă de mediu implicită pentru „Dezvoltare”, care va folosi baza de date, gazdă, utilizator, parola și opțiunile pe care tocmai le-am adăugat.

    Noi credem baza noastra de baza noastra cu urmatoarea comanda:

     sechestration db: creare 

    foarte bun! Acum hai să începem să ne creăm Modele:

     Sechize Model: Generare --name Utilizator --tributes Nume: String, Prenume: String, Alaverdom: String, Email: Seturi de strung Model: Generare - - Nume LanguageP --tributes Nume: String Sequiize Model: Generate --name_LenguaJep --tributesUeroid: Integer, Limba: Integer 

    După crearea modelelor noastre trebuie să faceți relația dintre utilizatori și limbi.

    {var utilizator = uscat Lize.define („Utilizator”, {Nume: Datatypes.String, Prenume: Datatypes.String, Alaverdom: Datatypes.String, Email: Datatypes.string}, {}); User.associate = Funcția (modelele) {// Asociațiile pot fi definite aici user.belongstoman (modele.Limba, {prin: „user_lenguajep”, cum ar fi: „LimbiPrograming”, seorty: „userid”,}); Returnați utilizatorul;};

    Să analizăm acest lucru, vedem că modelul nostru de utilizator execută o funcție de outstomană care indică modelul lingvistic, în câteva cuvinte, indicând faptul că un utilizator poate aparține mai multor limbi. În opțiuni, prin indică tabelul pentru care trebuie să traversați pentru a găsi aceste relații, așa cum este opțional, este numele proprietății sau cheii care ne vor da aceste relații, marcă de vorbire, deoarece coloana pe care vrem să o cauți Relații.

    ./ Modele / LanguageP.js

    Div ID = „B2212C3F2E”> „Utilizați stricte”; Module.exports = (Sechelii, Datatypes) = {var limbă = secheliza.define („lingvistic”, {name: datatypes.string}, {}); LanguageP.associate = Funcția (modelele) {// Asociațiile pot fi definite aici LanguageP.belongstomany (modele. Returnați limba;};

    Facem același lucru cu limbile (limbaj), dar acum indicând modelul de utilizator.

    Să ne amintim puțin despre ceea ce vorbim, Orm Funcționează pe un strat pe care îl cartografia (cartografiere), aceste relații vor fi efectuate numai în proiect, trebuie să creăm o migrație care afectează baza de date. Există Orm care revizuiesc dacă ați făcut modificări ale modelelor dvs. și creați migrații noi pe baza acestor modificări (DJANGO ORM, Peewee), în cazul nostru de secvență nu are acest lucru, așa că vom crea migrațiile noastre:

     Sechilibre Migrație: Generare - Relație nume-multi-la-multi 

    Acest lucru a generat un nou fișier cu un schelet în migrațiile noastre, acum trebuie să-l modificăm :

    divid id = „b2212C3F2E”> „utilizare strictă”; Module.exports = {Up: (QueryInterface, Sechelii) = {retur, {Tip: „cheie străină”, nume: ‘fk_usuarioleolegajep_usuaro_1’, referință: {tabel: „Utilizator” , Câmp: „ID”,}, Ondelete: „Nici o acțiune”, Onupdate: „Nici o acțiune”,}), QueryInterface.Addconstrance (‘user_lenguajep’ ,, {Tip: „Cheie străină”, Nume: „FK_USUARIOLEGEGAJAP_LENGUEP_1 ‘, Referințe : {Tabel: „Language”, câmp: „id ‘,}, ondelete:” nici o acțiune „, onupdate:” nici o acțiune „,}),]}, în jos: (QueryInterface, Sechelii) = {retur}};

    Acest fișier exportă un obiect cu 2 proprietăți, în sus și în jos. Proprietatea Up este responsabilă de furnizarea unei promisiuni care modifică datele (creați tabele, relații, câmpuri, tipuri de schimbare etc.), iar proprietatea în jos face altfel, reveniți la modificările care au fost făcute în sus.

    Foarte bine, acum atinge partea mea preferată, trebuie să rulați scripturile de migrare cu următoarea comandă:

     schema db: migrate 

    Boom! Dar ce sa intamplat?!?! Dacă am citit cu atenție eroarea din consola, spune că nu găsește tabelul User_Lenguajet din baza de date, revizuiți tabelele. Există ceva curios, toate capăt cu un „s”, acest lucru se datorează faptului că secheliza-cli gestionează plăcile plural în mod implicit, chiar și atunci când avem în opțiunile noastre, avem un nume gratuit: adevărat, acest caz poate fi văzut aici.

    Apoi trebuie doar să schimbăm numele tabelelor o plurală în relații-multi-la-multe (utilizator_lenguajeps, utilizatori, limbă).

    am anula migrațiile, muta înapoi și voilà . >

    Migrațiile au avut succes! Acum trebuie să populizăm aceste tabele, Secheliza-CLI utilizează semințele (semințe). Vom crea 3 fișiere de semințe:

     Sechelii Sequelize: Generare --name Utilizatori SEED: Generare --name Limitescauquelize Seed: Generare --name_LenguAjap 

    Aceste semințe sunt situate în dosarul ./seders, trebuie să puneți datele care Vrem să încărcăm în baza de date.

    Semi Toți utilizatorul:

     "utilizare strictă"; Module.exports = {up: (QueryInterface, Secheliza) =  {return queryinterface.bulkinsert ("Utilizatori", {}); }, în jos: (QueryInterface, Sechelii) =  {retur queryinterface.bulkdelete ("Utilizatori", Null, {}); }}; 

    semințe de limbă:

     "utilizare strictă"; Module.exports = {up: (QueryInterface, Sechelize) =  {return queryinterface.bulkinsert ('Languageps', {}); }, în jos: (QueryInterface, Sechelii) =  {return queryinterface.bulkdelete ('Languageps', Null, {}); }}; 

    semințe user_lenguajep:

     "utilizare strictă"; Module.exports = {up: (QueryInterface, Sechelize) =  {return queryinterface.bulkinsert ('user_lenguajeps' ,, {}); }, În jos: (QueryInterface, Sechelii) =  {return queryInterface.Bulkdelete ("user_lenguajeps, null, {}); }}; 

    Acum trebuie să încărcați aceste date în baza de date cu următoarea comandă:

     secheliza db: semințe: toate 

    Foarte bine! Am văzut deja cum să inițializăm un proiect cu sechelelă, să creăm modele, să atribuie relații, să creezi migrații, să ruleze și să anuleze migrațiile, să creeze semințe și să le încărcați în baza de date, trebuie doar să facem interogări. Mergem la index.js în rădăcină și scriem următoarea funcție:

     const db = necesită ("./ modele"); Const principal = async () =  {încercați {utilizatori const = Await db.suario.findall ({includ:}, prin: {atribute:},}],}); Consola.log (JSON.Stringfy (utilizatori)); Proces.exit (); } captura (eroare) {Console.log (eroare); }}; Principal (); 

    Salvați-l și executăm programul (fie prin consola, fie cu instrumentul de depanare a codului Visual Studio și ar trebui să primim un JSON cu o listă de utilizatori (în acest exemplu există doar unul) cu datele și limbile dvs.:

    }] 

    Am învățat sequelize-cli și elementele de bază ale sechelii, acum putem crea un API care execută Acțiunile Crud, astfel încât clienții noștri să o consume!

    Lasă un răspuns

    Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *