Fortune.js este un strat non-nativ de abstractizare a bazelor de date care implementeaza caracteristici grafice la nivel de aplicatie pentru Node.js si browsere web. Ofera o interfata comuna pentru baze de date, precum si relatii, actualizari inverse, integritate referentiala, care sunt construite pe baza ipotezelor din modelul de date.

Este deosebit de util pentru:

  • Relatii bidirectionale in orice baza de date.
  • Aplicatii care necesita optiuni de stocare pentru a fi portabile.
  • Partajarea acelorasi modele de date pe server si client.

Vizualizati site-ul web pentru documentatie. Obtineti-l de la npm:

$ npm install fortune –save

Acesta este modulul de baza. Functii suplimentare, cum ar fi reteaua (HTTP, WebSocket), adaptoare de baze de date, formate de serializare sunt enumerate in pagina de pluginuri.

Utilizare

Trebuie furnizate doar definitiile tipului de inregistrare. Aceste definitii descriu ce tipuri de date pot apartine unei inregistrari si ce relatii pot avea, pentru care Fortune.js face actualizari inverse si mentine integritatea referentiala. Iata un exemplu de serviciu de baza de microblogging:

const fortune = require (‘fortune’) // Functioneaza si in browserele web. const store = fortune ({utilizator: {nume: sir, // Urmaritorii si urmaritorii sunt inrudite invers (multi-la-multi). urmatori: [Array („utilizator”), „adepti”], adepti: [Array (‘ utilizator ‘),’ urmator ‘], // Relatia mult-la-unu a postarilor utilizatorilor cu autorul postarii. postari: [Array (‘ postare ‘),’ autor ‘]}, postare: {mesaj: String, // One relatia dintre multi dintre autorul postarii si postarile utilizatorului. autor: [‘user’, ‘posts’]}})

Retineti ca ID-ul cheii primare este rezervat, deci nu este necesar sa specificati acest lucru. Link-urile sunt coduri care sunt mentinute intern la nivel de aplicatie de Fortune.js si sunt intotdeauna denormalizate, astfel incat fiecare link sa aiba un back-link. Acest lucru inseamna, de asemenea, ca modificarile intr-o inregistrare vor afecta legaturile din inregistrarile conexe.

In mod implicit, datele sunt pastrate in memorie (si IndexedDB pentru browser). Exista adaptoare pentru baze de date precum MongoDB, Postgres si NeDB. Consultati pagina de pluginuri pentru mai multe detalii.

Fortune are 4 metode principale: gasiti, creati, actualizati si stergeti, care corespund CRUD. Semnaturile metodei sunt urmatoarele:

// Primul argument „tip” este intotdeauna necesar. Argumentul optional „include” // este utilizat pentru gasirea inregistrarilor conexe in aceeasi solicitare si este // documentat in metoda „solicitare”, iar „meta” optional este specific // adaptorului. Toate metodele returneaza promisiuni. store.find (type, ids, options, include, meta) store.create (type, records, include, meta) // Inregistrari necesare. store.update (tip, actualizari, include, meta) // Actualizari necesare. store.delete (tip, id-uri, include, meta) // De exemplu ..

porno peludas españolas follando rico
videosdeincesto pornoxxxxx
jovencitas masturbandose porno español jovencitas
hentaihd comic porno español
orgias familiares videos porno abuelas
sexo gratis incesto cincuentonas follando
mamas cachondas xxx abuelas
desnudas en la cocina pono gay
guarras.com danna paola desnuda
maduras pajeando culos porno
fontanero cachondo corridas en la garganta
madre española se folla a su hijo chochitos jovencitos
videos xxxxx orgias caseras
mamadas de abuelas intercambio parejas amateur
se la chupa mientras duerme el video porno mas visto en internet
porno incesto real follando en el campo
madura se corre pajas caseras
cincuentonas follando cachondas españolas
follando a mi hijastra me hace una paja
creampie española videos porno caseros españoles

. store.find („utilizator”, 123) .then (rezultate => {…})

Primul apel de metoda care interactioneaza cu baza de date va declansa o conexiune la magazinul de date si va intoarce rezultatul ca o promisiune. Metodele specifice inconjoara metoda de solicitare mai generala, consultati documentatia API pentru solicitare.

Carlige de intrare si iesire

Carligele I / O izoleaza logica de afaceri si fac parte din ceea ce face interfata reutilizabila in diferite protocoale. O functie de carlig de intrare si iesire poate fi definita pentru fiecare tip de inregistrare. Functiile Hook accepta cel putin doua argumente, obiectul context, inregistrarea si optional obiectul de actualizare pentru o cerere de actualizare. Metoda unui carlig de intrare poate fi orice metoda, cu exceptia cautarii, si un carlig de iesire poate fi aplicat pe toate metodele.

O functie de carlig de intrare poate returna sau rezolva optional o valoare pentru a determina ce persista si este sigur sa mutati oricare dintre argumentele sale. Valoarea returnata sau rezolvata trebuie sa fie inregistrarea daca este o cerere de creare, actualizarea daca este o cerere de actualizare sau orice altceva (sau pur si simplu nul) daca este o cerere de stergere. De exemplu, o functie de carlig de intrare pentru o inregistrare poate arata astfel:

intrare functie (context, inregistrare, actualizare) {switch (context.request.method) {// Daca este o cerere de creare, returnati inregistrarea. case ‘create’: returneaza inregistrarea // Daca este o cerere de actualizare, returneaza actualizarea. case ‘update’: return update // Daca este o cerere de stergere, valoarea returnata nu conteaza. caz ‘sterge’: returneaza nul}}

O functie de carlig de iesire poate returna sau rezolva optional o inregistrare si este sigur sa mutati oricare dintre argumentele sale.

iesire functie (context, inregistrare) {record.accessedAt = new Date () return record}

In functie de faptul daca inregistrarea rezolvata este sau nu diferita de ceea ce a fost transmis, serializatorii pot decide sa nu afiseze inregistrarea rezolvata a carligului de iesire pentru cereri de actualizare si stergere.

Carligele pentru un tip de inregistrare pot fi definite dupa cum urmeaza:

const store = fortune ({utilizator: {…}}, {carlige: {// Functiile carligului trebuie definite in ordine: prima intrare, ultima iesire. utilizator: [intrare, iesire]}})

Retele

Exista o implementare de ascultator HTTP, care returneaza un ascultator de cereri Node.js care poate fi compus in aplicatii mai mari. Acesta mapeaza automat solicitarile si raspunsurile Fortune la protocolul HTTP:

// Adu-ti propriul HTTP! Acest lucru faciliteaza adaugarea SSL si permite utilizatorului // sa aleaga intre diferite implementari HTTP, cum ar fi HTTP / 2. const http = require (‘http’) const fortune = require (‘fortune’) const fortuneHTTP = require (‘fortune-http’) const store = fortune (…) // Functia `fortuneHTTP` returneaza o functie de ascultator care face // negocierea continutului si mapeaza raspunsul intern la un raspuns HTTP. const ascultator = fortuneHTTP (magazin) const server = http.createServer ((cerere, raspuns) => ascultator (cerere, raspuns) .catch (eroare => {/ * inregistrare erori * /})) store.connect (). (() => server.listen (1337))

Acest lucru genereaza un JSON ad hoc prin API-ul HTTP, precum si o interfata HTML pentru oameni. Exista, de asemenea, serializatoare pentru Micro API (JSON-LD) si JSON API.

Fortune.js implementeaza propriul protocol cablu bazat pe WebSocket si MessagePack, care este util pentru aplicatii soft in timp real.

Caracteristici si non-caracteristici

  • Actualizarile de relatii inversa mentin automat ambele parti ale relatiilor dintre inregistrari.
  • Integritate referentiala, asigurati-va ca legaturile trebuie sa fie valabile la nivel de aplicatie.
  • Validari de tip, campurile sunt garantate sa apartina unui singur tip.
  • Interfata adaptor, utilizati orice baza de date care poate implementa un adaptor.
  • Fara cartografiere relationala obiect (ORM) sau model de inregistrare activ, doar obiecte de date simple.
  • Fara cuplare cu protocolul de retea, gestionati solicitarile de oriunde.

Cerinte

Fortune.js este scris in ECMAScript 5.1, cu o adaugare ECMAScript 6: Promise . Majoritatea API-ului sau public returneaza promisiunile de a fi compatibile cu editiile viitoare ale limbii.

Licenta

Acest software este licentiat sub licenta MIT.