[ALPHA] Drop-in, suport pentru serializator agnostic ORM pentru aplicatiile Express / Connect Node.

Nota: acesta este un software alfa si este inca in curs de schimbare. Contributii binevenite, consumatorii atentie ????

Instalare

$ npm install – salvati blackburn

Utilizare

Blackburn se conecteaza la aplicatia dvs. ca middleware Express / Connect. Pentru a-l utiliza, trebuie sa furnizati doua lucruri: un adaptor si serializatoare. Iata un exemplu simplu:

// app.js importa blackburn din „blackburn”; import expres din „expres”; let app = express (); app.use (blackburn ({adaptor: new blackburn.RawAdapter ()})); app.get (‘/’, function (req, res, next) {res.render (Post.find (1));}); // serializatori / books.js importa FlatSerializer din „blackburn”; export implicit FlatSerializer.extend ({atribute: [‘title’, ‘description’]});

Aceasta seteaza Blackburn pentru a utiliza adaptorul brut si il furnizeaza cu un serializator de carti (mai multe despre adaptoare si serializatoare de mai jos).

Blackburn suprascrie res.render () in mod implicit (desi acest lucru este personalizabil). Accepta doua argumente:

  1. sarcina utila – datele cu care doriti sa raspundeti. Poate fi, de asemenea, o promisiune care se rezolva cu sarcina utila intentionata.
  2. optiuni – va permite sa treceti optiuni prin redare. De exemplu, randatorul JSON-API accepta o optiune inclusa pentru a adauga inregistrari incarcate lateral la raspuns.

Puteti personaliza numele metodei de redare a lui Blackburn trecand in optiunea „renderMethodName”:

app.use (blackburn ({// … renderMethodName: “renderJSON”})); app.get (‘/’, function (req, res, next) {res.renderJSON (/*…*/);});

Optiuni

Constructorul middleware Blackburn are mai multe optiuni, afisate mai jos cu valorile lor implicite:

blackburn ({adaptor: // Obligatoriu. Trebuie sa fie o instanta de blackburn.Adapter. Specific ORM-ului dvs. (adica MongooseAdapter). serializatori: „./serializers” // cale relativa la directorul care contine serializatori sau un obiect ale carui chei sunt tipurile si valorile modelului sunt instantele Serializer corespunzatoare, adica {“carti”: BookSerializer} renderMethodKey: ‘render’ // numele metodei de atasat la obiectul de raspuns.

follando con las vecinas suegras peludas
follada a traicion madres cachondas
porno portugues muy tetonas
pajotes porno gratis abuelos
argentina follada videos porno xxx incesto
cerdas com gratis porno argumento
porno traducido al español viejas calientes
realincest folladas caseras reales
videos madres lesbianas pornoamater
xxporn masaje final feliz
putas en vic incesto real madre hijo
videos porno abuelas videos gays españoles
porno español creampie porno abuelas tetonas
follada por muchos follate a mi novia
jovenes zorras vecinas cachondas
casadas cachondas penes erectos
jovencitas peludas follando videos chicas gratis
se corre dentro de su prima casting porno español
follar con jovencitas porno gay violacion
cornudos consentidos porno casero colombiano

In mod implicit, va suprascrie standardul res.render Express))

Concepte

Scopul Blackburn este de a oferi codului dvs. middleware o interfata consistenta pentru a reda un raspuns JSON fara a fi preocupat de detaliile despre cum este structurat acest raspuns. Acest lucru va permite sa separati prezentarea raspunsurilor dvs. de munca de construire a acestora.

Exista doua concepte principale cu care va veti ocupa:

  • Adaptoarele permit blackburn-ului sa va inteleaga ORM-ul (sau lipsa acestuia – consultati RawAdapter). Deoarece blackburn-ul nu este legat de un ORM specific, trebuie sa stie cum sa-ti intrebe modelele ce tip sunt, care sunt relatiile lor etc.
  • Serializatorii reprezinta diferitele structuri si formate de iesire. De exemplu, serializatorul JSONAPI va trimite raspunsuri conforme JSONAPI 1.0. Serializatorii va pot permite, de asemenea, sa personalizati raspunsul, adica atributele din lista alba care trebuie incluse sau redenumirea underscored_keys in camelCased).

Pentru adaptoare, veti alege, de obicei, o clasa pre-construita, grupata (adica MongooseAdapter daca utilizati Mongoose), sau o veti furniza pe a dvs. daca ORM-ul dvs. nu este acceptat din cutie.

Pentru serializatoare, veti alege de obicei un format pentru API-ul dvs. (de exemplu, JSON plat, JSONAPI 1.0 etc.) si veti alege un serializator de baza pentru acel format (adica JSONAPISerializer). Apoi, fiecare tip de model se va extinde din serializatorul de baza si va personaliza care dintre atributele si relatiile sale sunt trimise prin fir (de exemplu, BooksSerializer extinde JSONAPISerializer).

Serializatoare

Serializatorii va permit sa personalizati ce date i se returneaza raspunsul si sa aplicati transformari simple acestuia.

Atributele serializarii

In mod implicit, trebuie sa definiti o lista alba a tuturor atributelor care vor fi trimise inapoi cu raspunsul:

// serializatori / user.js importa {FlatSerializer} din „blackburn”; export implicit FlatSerializer.extend ({atribute: [‘first_name’, ‘last_name’, ’email’]});

Daca modelul dvs. de utilizator include si un camp hashed_password, atunci serializatorul de mai sus ar elimina acest lucru din raspuns. Unul dintre avantaje aici este ca UserSerializer va rula ori de cate ori un utilizator este serializat, chiar daca este o inregistrare aferenta . In acest fel, nu trebuie sa va amintiti sa eliminati hashed_password pe fiecare traseu posibil din aplicatia dvs.

De asemenea, puteti personaliza modul in care datele din inregistrarile dvs. sunt serializate si ii puteti aplica transformari de baza:

// serializatori / book.js importa {Serializator} din „blackburn”; export implicit Serializer.extend ({atribute: [‘title’, ‘published_at’, ‘published_city’], // keyForAttribute va permite sa redenumiti numele atributelor atunci cand sunt convertite in chei de incarcare utila keyForAttribute (attributeName) {// In acest caz, vom convertiti underscored_keys in camelCasedKeys returneaza camelCase (attributeName);}});

Relatii serializante

De asemenea, puteti personaliza modul in care datele aferente sunt serializate cu inregistrarile dvs. Serializarea relatiilor este de obicei mult mai complexa decat atributele de baza, astfel incat sa puteti furniza propria configuratie pentru fiecare relatie pentru a decide cum este serializata.

Numai trei optiuni sunt acceptate de toate serializatoarele incorporate: tip (obligatoriu), strategie (obligatoriu) si serializator (optional):

// serializatori / book.js importa {FlatSerializer} din „blackburn”; export implicit FlatSerializer.extend ({relatii: {autor: {// Tipul tipului de inregistrare aferent: „utilizatori”, // Trimiteti doar ID-ul autorului, nu intreaga inregistrare a autorului. Alte // strategii posibile includ „ id-uri “,” inregistrare “si” inregistrari “. Ultimele // doua trimit intreaga inregistrare legata cu raspunsul. strategie:” id “, // Daca doriti sa personalizati modul in care o inregistrare legata este serializata, // din serializatorul standard, puteti furniza un serializator numai pentru // aceasta relatie serializator: BookAuthorSerializer}}});

Similar cu atributele, puteti efectua si transformari de baza ale relatiei si ale proprietatilor acesteia:

// serializatori / book.js importa {FlatSerializer} din „blackburn”; export implicit FlatSerializer.extend ({// keyForRelationship va permite sa redenumiti relatiile keyForRelationship (relationName) {// In acest caz, convertim underscored_keys in camelCasedKeys returneaza camelCase (relationName);}});

In cele din urma, unele serializatoare pot oferi mai multe optiuni pentru serializarea relatiilor. De exemplu, serializatorul JSONAPI accepta adaugarea de legaturi de relatie cu sarcina utila:

// serializatori / book.js importa {JSONAPISerializer} din „blackburn”; export implicit JSONAPISerializer.extend ({relatii: {autor: {tip: „utilizatori”, strategie: „id”, relatieLink: „/ carti / {id} / relatii / autor”, relatedLink: „/ carti / {id} / autor ‘}}});

Consultati documentatia pentru fiecare serializator pentru optiunile disponibile.

Adaptor

Adaptoarele permit Blackburn-ului „sa vorbeasca aceeasi limba” ca si modelele dvs., indiferent de ce ORM utilizati. Daca Blackburn nu are inca un adaptor incorporat pentru ORM-ul dvs., nu va temeti – acestea sunt relativ simple de implementat: doar 4 metode.

Interfata pe care trebuie sa o implementeze un adaptor:

lasati CustomAdapter = blackburn.Adapter.extend ({typeForRecord (inregistrare, optiuni) {// returneaza tipul inregistrarii, adica „carti”}, idForRecord (inregistrare, optiuni) {// returneaza tipul inregistrarii, adica „ 507f1f77bcf86cd799439011 “}, atributeFromRecord (inregistrare, atributNume, optiuni) {// returneaza atributul solicitat din inregistrare, adica: // atributeFromRecord ({title: ‘foo’}, ‘title’, options) => ‘foo’}, relationFromRecord (inregistrare, nume, config, optiuni) {// returneaza orice date sunt specificate in config pentru relatie; // ie // // relationFromRecord ({author_id: 1}, ‘author’, {Strategy: ‘id’ }, optiuni) => 1}});

Asta este! Observati ca fiecare metoda accepta un argument final care este un hash de optiuni. Aceasta este optiunea hash pe care o treceti in res.render (sarcina utila, optiuni) de la handler-ul dvs. de traseu, deci daca trebuie sa personalizati functionalitatea dincolo de ceea ce permite blackburn-ul, aceasta este o „supapa de evacuare” usoara pentru a face fata asta.

Licenta

MIT © Dave Wasmer