javascript - Înțelegerea modului de a folosi NodeJS pentru a crea un backend simplu
Am încercat să dezvolt un server destul de simplu în nodejs. Practic, ceea ce urmăresc este un API simplu care necesită autentificare (stil simplu cu nume de utilizator/parolă). Ceea ce nu am nevoie este de vreun fel de funcționalitate frontend (templating etc.). Problema mea este că nu reușesc să înțeleg abordarea express/node.
În mod specific, întrebările mele sunt:
- Cum conectez autentificarea? Trebuie să trec mai mulți handleri în fiecare rută care necesită autentificare, sau există o modalitate mai elegantă de a face asta?
- Cum funcționează middleware-ul Express (cum ar fi
app.use(express.bodyParser())request sau response? Mai exact, dacă folosesc parserul de corp (intern, formidable?), unde accesez datele cererii pe care acesta ar trebui să le parseze? - Când folosesc autentificarea și am, să zicem, acreditive stocate într-o bază de date cu mai multe informații despre clientul individual asociat, în ce moment extrag acele informații? Adică, atunci când un utilizator se conectează, preiau înregistrarea utilizatorului la conectare și o transmit mai departe, sau o preiau în fiecare handler care necesită informația?
- În cele din urmă, cunoști vreo aplicație open source pe care aș putea să o verific? Aș dori să văd ceva care are autentificare simplă și poate chiar utilizează formidable, deoarece încărcarea unui fișier este unul dintre cerințele mele.
Așa cum am menționat mai devreme, cred că problema mea este, în cele din urmă, o dificultate cu abordarea orientată pe funcții în node (de asemenea, am o experiență destul de limitată în programarea serviciilor web). Dacă cunoști o resursă unde aș putea citi despre cum să abordez arhitecturarea unei aplicații nodejs, te rog să nu eziți să mi-o arăți.
Răspuns #1
Cum conectez autentificarea? Trebuie să transmit mai mulți handleri la fiecare rută care necesită autentificare, sau există o metodă mai elegantă de a face asta?
Ar trebui să folosești middleware-ul pentru sesiune. Iată ceva cod pseudo:
var http = require('http');
var app = express();
var authorize = function(req, res, next) {
if(req.session && req.session.appname && req.session.appname === true) {
// redirect to login page
return;
}
next();
}
app.use(express.session());
app.all('/admin*', authorize, function(req, res, next) {
});
Cum funcționează middleware-ul Express (cum ar fi app.use(express.bodyParser()))? Modifică acestea conținutul obiectului request sau response? Mai exact, dacă folosesc body parser-ul (intern intern formidable?), unde accesez datele request-ului pe care acesta ar trebui să le parseze?
Fiecare middleware are acces la obiectul request și response. Deci, da, îl modifică. În mod normal, atașează proprietăți la acesta. Aceasta înseamnă că în interiorul handler-ului tău (care este de asemenea un middleware) poți scrie:
if(req.body && req.body.formsubmitted && req.body.formsubmitted === 'yes') {
var data = {
title: req.body.title,
text: req.body.text,
type: req.body.type
}
// store the data
}
Când folosesc autentificarea și am, să zicem, credențiale stocate într-o bază de date cu mai multe informații despre clientul individual asociat, în ce moment extrag acele informații? Adică, când un utilizator se conectează, preiau înregistrarea utilizatorului la autentificare și o transmit mai departe sau o preiau în fiecare handler care necesită acea informație?
Cred că ar trebui să faci lucrurile în același mod ca în orice alt limbaj de pe partea de server. Păstrează starea utilizatorului (logat/nelogat) într-o sesiune. De asemenea, poți păstra ID-ul utilizatorului și să preiei datele pentru el ori de câte ori ai nevoie. Depinde de cazul tău, dar ai posibilitatea de a memora informațiile în cache. Pentru că Node nu este ca PHP, de exemplu, vreau să spun că nu moare.
În cele din urmă, cunoști vreo aplicație open source pe care aș putea să o consult? Aș dori să văd ceva care are autentificare simplă și poate chiar să utilizeze formidable, deoarece încărcarea unui fișier este unul dintre cerințele mele.
Da. Am scris un articol despre un site web MVC foarte simplu cu panou de administrare. Este disponibil aici. Și codul acestuia este aici.
Răspunsul #2
O metodă simplă de a implementa autentificarea (dacă nu doriți să folosiți module suplimentare):
var checkAuth = function(req, res, next) {
if(!req.session.user)
{
// Redirect to login form
res.redirect("/login");
}
else
{
// Proceed to member's area
next();
}
};
app.get("/member/page", checkAuth, function(req, res) {
// render view, etc
});
bodyParser analizează/convertește conținutul unui request POST într-un obiect, ceea ce ajută la obținerea valorilor trimise prin formular.
Ruta care gestionează trimiterea formularului de autentificare poate accesa numele de utilizator/parola astfel:
var username = req.body.username;
var password = req.body.password;
În acest moment ai interoga baza de date pentru a selecta din utilizatori unde numele de utilizator și parola coincid (ai dori să folosești criptarea parolelor într-un mediu de producție).
Dacă primești un înregistrare în rezultatul interogării, seteaz-o în sesiune. O modalitate simplă de a face acest lucru este:
req.session.user = userRecord
(Ajustați pentru middleware-ul sesiunii dvs.)
