În acest tutorial de trei părți, vom fi scufundați adânc în crearea unei aplicații de gestionare a listelor în Node.js și Geddy. Aceasta este a doua parte a seriei, unde vom crea o aplicație de gestionare a listei simple.
Ca o reîmprospătare rapidă, ultima dată când am instalat Node și Geddy, am generat o nouă aplicație și am învățat cum să pornim serverul. În acest tutorial ne vom baza pe ceea ce am făcut ultima oară, așa că asigurați-vă că ați terminat acest lucru înainte de a continua.
Geddy are un generator de resurse construit; acest lucru ne va permite să generăm automat un model, controler, vizualizări și rute pentru o anumită resursă. Aplicația noastră de listă va avea doar o singură resursă: a face
. Pentru ao genera, doar CD
în directorul aplicației (calea cd / to / your / todo_app
) și fugi:
gaddy resource todo
Acum ar trebui să adăugați aceste fișiere în aplicația dvs.:
Ta config / router.js
ar trebui, de asemenea, să o anexăm:
router.resource ( 'todos');
Dacă sunteți nou la MVC, toate acestea vă pot părea puțin cam descurajante. Nu vă faceți griji, este foarte simplu odată ce ați dat seama.
modele / todo.js: Acest fișier este locul unde ne vom defini a face
model. Vom defini un număr de proprietăți pe care toate acestea le conțin a face
au. De asemenea, vom scrie câteva validări de date aici.
controlere / todos.js: Acest fișier este în cazul în care toate / Todos /
rutele se termină. Fiecare acțiune în acest controler are un traseu corespunzător:
GET / todos / => index POST / todos / => creați GET / todos /: id => arătați PUT / todos /: id => actualizare DELETE / todos /: id => remove GET / todos / > adăugați GET / todos /: id / edit => editați
vizualizari / Todos /: Fiecare fișier de aici corespunde cu unul din OBȚINE
rutele pe care vi le-am arătat mai sus. Acestea sunt șabloanele pe care le folosim pentru a genera capătul frontal al aplicației. Geddy utilizează EJS (JavaScript încorporat), deoarece este un limbaj de template. Ar trebui să pară familiar dacă ați folosit vreodată PHP sau ERB. Practic, puteți utiliza orice JavaScript pe care doriți în șabloanele dvs..
Acum, că am generat o grămadă de cod, să verificăm că avem toate căile de care avem nevoie. Porniți din nou aplicația (geddy
) și indicați browser-ul dvs. la http: // localhost: 4000 / todos. Ar trebui să vezi ceva de genul ăsta
Continuați și încercați asta pentru celălalt OBȚINE
și rute:
Toate bune? Bine, să continuăm.
În Geddy (și în majoritatea celorlalte cadre MVC), utilizați modele pentru a defini tipul de date cu care va funcționa aplicația dvs. Tocmai am generat un model pentru noi a face
s, deci să vedem ce ne-a dat:
var Todo = funcție () // Câțiva comentați codul; // Unul mai comentat codul Todo = geddy.model.register ('Todo', Todo);
Modelele sunt destul de simple în Geddy. Noi doar creăm o nouă funcție de constructor pentru noi a face
și înregistrându-l ca model în geddy. Să definim câteva proprietăți pentru noi a face
s. Ștergeți tot codul comentat și adăugați-l la funcția contructor:
var id: type: 'string', cerut: true, status: type: 'string', cerut : Adevărat ); ;
Al nostru a face
s va avea un titlu, un id și o stare și toate cele trei vor fi necesare. Acum, să punem câteva validări pentru noi a face
s.
var id: type: 'string', cerut: true, status: type: 'string', cerut : Adevărat ); this.validatesPresent ( 'titlu'); this.validatesLength ("titlu", min: 5); this.validatesWithFunction ('status', funcția (status) return status == 'open' || status == 'done';); ;
Validăm că titlul este prezent, că titlul are o lungime minimă de 5 caractere și că folosim o funcție pentru a valida că statutul este fie deschis
sau Terminat
. Există câteva funcții de validare care sunt construite, continuați și verificați proiectul pe http://github.com/mde/geddy pentru a afla mai multe despre ele.
Acum, când am creat modelul todo, putem crea undeva pentru a stoca modelele noastre. În scopul acestui tutorial, vom păstra datele în memorie. Vom suspenda o gamă de todos din lumea noastră geddy
obiecte pentru a lipi datele. În următoarea parte a acestei serii, vom începe să le obținem într-o bază de date.
Deschide-ți config / init.js
fişier. Tot ce ar trebui să fie acolo acum este un manipulator excepțional de excepție la nivel mondial:
// adăugați un handler de excepție uncaught în medii prod-like dacă (geddy.config.environment! = 'Development') process.addListener ('uncaughtException', funcția (err) geddy.log.error (JSON.stringify )););
Imediat după acest bloc de cod, hai să ne agățăm matricea geddy
global:
geddy.todos = [];
Acolo, acum avem un loc pentru a ne depozita a face
s. Amintiți-vă că aceasta este în memoria aplicației dvs., astfel încât va dispărea atunci când reporniți serverul.
Un model-adaptor oferă baza Salvați
, elimina
, sarcină
, și toate
metode de care are nevoie un model. Sursa noastră de date este destul de simplă (doar o matrice!), Așa că scrierea adaptorului nostru de model ar trebui să fie destul de simplă.
Creați un director în lib
denumit model_adapters
și creați un fișier în lib / model_adapters
denumit todo.js
. Să deschidem acel fișier și să adăugăm un cod de boilerplate:
var Todo = nou (funcția () ) (); exports.Todo = Todo;
Tot ceea ce facem aici este crearea unui nou obiect gol, care să fie exportat în orice scop, care necesită acest fișier. Dacă doriți să aflați mai multe despre modul în care funcționează metoda Node, acest articol are o imagine de ansamblu destul de bună. În acest caz, ale noastre init.js
fișierul va face necesarul.
Așa că am creat un nou obiect adaptor Todo. E destul de stearpă acum, dar vom ajunge la asta în curând. Pentru moment, va trebui să ne întoarcem la init.js și să adăugăm un cod astfel încât să fie încărcat în aplicația noastră atunci când pornește. După geddy.todos = [];
în config / init.js
adăugați aceste două linii:
geddy.model.adapter = ; geddy.model.adapter.Todo = cere (process.cwd () + '/lib/model_adapters/todo').Todo;
Am creat un obiect gol pentru modelul adaptor și am adăugat adaptorul de model Todo pe el.
Acum, când avem modelul și adaptorul nostru de model, putem începe în logica aplicației. Să începem cu adăugarea de articole în lista noastră de lucru.
Când lucrați cu date, primul loc pe care ar trebui să-l faceți este adaptorul de model. Trebuie să putem salva o instanță a modelului nostru Todo în matricea noastră geddy.todos. Deci, deschide-te lib / model_adapters / todo.js
și adăugați o metodă de salvare:
var Todo = nou (funcția () this.save = funcția (todo, opts, callback) if (typeof callback! = 'function') callback = function; todos.push (todo); retur apel invers (null, todo);) ();
Tot ce trebuie să facem este să setăm proprietatea salvată a instanței la adevărat și să împingem elementul în matricea geddy.todos. În Nod, este mai bine să faceți toate intrările / ieșirile într-un mod ne-blocabil, deci este o idee bună să obțineți obiceiul de a utiliza apeluri de apel pentru a transmite date în jur. Pentru acest tutorial nu contează atât de mult, dar mai târziu când începem lucruri perseverente, va veni la îndemână. Veți observa că ne-am asigurat că apelul este o funcție. Dacă nu facem acest lucru și vom folosi salvați fără apel invers, am obține o eroare. Acum, să mergem la acțiunea de creare a controlorului.
Continuați și aruncați o privire la crea
acțiune în app / controlere / todos.js
:
this.create = funcția (req, resp, params) // Salvați resursa, apoi afișați pagina de index this.redirect (controller: this.name); ;
Destul de simplu, nu? Geddy ți-a stîngiat-o. Deci haideți să o modificăm puțin:
Aceasta este o functie (req, resp, params) var self = aceasta, todo = geddy.model.Todo.create (title: params.title, id: geddy.string.uuid '); todo.save (funcția (err, date) if (err) params.errors = err; self.transirect ('add'); ; ;
În primul rând, vom crea o nouă instanță a modelului Todo cu geddy.model.Todo.create
, trecând în titlul pe care îl va afișa formularul nostru și setând valorile implicite pentru id și stare.
Apoi numim metoda de salvare pe care am creat-o pe adaptorul de model și redirecționăm utilizatorul înapoi la ruta / todos. Dacă nu a trecut validarea sau am primit o eroare, folosim controlerul transfer
metoda de transferare a solicitării înapoi la adăuga
acțiune.
Acum este momentul să configurați șablonul de adăugare. Aruncăm o privire la app / views / Todos / add.html.ejs
, ar trebui să arate astfel:
params
<% for (var p in params) %>
- <%= p + ': ' + params[p]; %>
<% %>
Nu vom avea nevoie de asta
pentru cazul nostru de utilizare, așa că să scăpăm de el deocamdată. Fă-ți add.html.ejs
arata astfel:
<%= partial('_form', params: params); %>
Paralele vă oferă o modalitate ușoară de a partaja codul între șabloanele dvs..
Veți observa că folosim parțial acest șablon. Paralele vă oferă o modalitate ușoară de a partaja codul între șabloanele dvs. Modelele noastre de adăugare și editare folosesc același formular, așadar să creăm parțial acest formular. Creați un fișier nou în vizualizari / Todos /
director numit _form.html.ejs
. Utilizăm o subliniere pentru a afla dacă acest șablon este parțial. Deschideți-l și adăugați în acest cod:
<% var isUpdate = params.action == 'edit' , formTitle = isUpdate ? 'Update this To Do Item' : 'Create a new To Do Item' , action = isUpdate ? '/todos/' + todo.id + '?_method=PUT' : '/todos' , deleteAction = isUpdate ? '/todos/' + todo.id + '?_method=DELETE' :", btnText = isUpdate ? 'Update' : 'Add' , doneStatus = isUpdate ? 'checked' :", titleValue = isUpdate ? todo.title :", errors = params.errors; %>