2010-09-17 30 views

risposta

93

È possibile farlo molto facilmente utilizzando:

Altra opzione è quella di utilizzare framework:

  • Express.js: http://expressjs.com/

    sembra essere il quadro node.js più utilizzato. È come Sinatra per Ruby e funziona in cima alla connessione.

  • Geddy: http://geddyjs.org/

    Se si vuole fare WebApps più complesse, Geddy è quello che si sceglie. È come Rails for Ruby.

+0

Cosa offre geddy sopra/sopra espresso? - La stessa differenza di Sinatra e Rails? – Michael

+1

@ Michael [geddy vs express] (http://stackoverflow.com/questions/5683916/node-js-express-vs-getty/5683938#5683938) – Raynos

+4

Penso che dovresti menzionare che Express è costruito su Connect - - Qualsiasi funzione o componente aggiuntivo compatibile con Connect funzionerà con Express. –

2

Se siete alla ricerca per lo sviluppo web serio usando Node.js, utilizzare Express framework; supporta sessioni.

Creare il progetto Express con le opzioni --sessions.

$ express --sessions 

Per installare espresso:

$ npm install express -g 
+0

Non più supportato. Devi aggiungere 'cookie-session' al tuo' package.josn' per funzionare. –

12

Basta scaricare a memcache o qualche altro meccanismo di caching. Non caricherò i tuoi server con questo genere di cose. Qual è il punto di un server web super-magro che deve ricordare cose.

Vorrei anche provare a sviluppare il tuo sito come un'applicazione e non un sito Web, o trattare il tuo sito web come un'applicazione, utilizzare le meravigliose funzionalità di html5 come memoria locale/database locali e ridurre la quantità di traffico tra macchine server e client.

Se tutto il resto fallisce (o il sito è di piccole dimensioni), allora cosa si ferma scrivendo la propria sessione di classe. Non così difficile. Soprattutto se si tratta di una cosa del tipo in memoria. Metti un po 'di logica del timer per le sessioni di time-out e eccoti. Accidenti in un linguaggio dinamico come JavaScript, dovrebbe essere un gioco da ragazzi.

La struttura deve essere un dizionario in cui la chiave è sessione e il valore è un oggetto che contiene dettagli dell'ultima comunicazione e capacità (per consentire l'accesso a determinate funzioni). Aggiungi una funzione di sweep per cancellare le vecchie sessioni scadute. e bingo.Un servizio di sessione di base. un controllo di base su "è la chiave di sessione in elenco ... sì/no ... ottieni dettagli" ... e penso che questo sia .... o c'è qualche caratteristica che mi manca.

Personalmente eviterei qualsiasi strumento di terze parti là fuori il più a lungo possibile. Sands of time shift molto rapidamente e puoi sempre dipendere da codice sviluppato da te.

+1

Il tuo ultimo commento non è vero per diversi motivi. Se si ottiene il codice da un framework popolare, è probabile che sia stato sottoposto a un numero sufficiente di test per controllare il problema; il tuo codice è buono solo come il test che tu stesso puoi eseguire. Se non aggiorni il quadro, le sabbie non si spostano mai. Se si aggiorna, il proprio codice ha una maggiore possibilità di rottura rispetto al codice di terze parti, che avrebbe potuto essere aggiornato lungo il codice del server. Il tuo codice deve essere aggiornato manualmente. Quindi, in praticamente tutti gli scenari, il codice di terze parti è un'opzione migliore. "Non reinventare la ruota" è un detto popolare per una ragione. – Tyrsius

+14

Bene nella mia esperienza, ogni volta che aggiungi un nuovo strumento di terze parti, ti leghi a quella terza parte per l'aspettativa di vita del prodotto che stai sviluppando. Questo è male, la mancanza di controllo e la comprensione dell'idea di qualcuno del buon codice che è stato inscatolato in nero è molto difficile da affrontare quando qualcosa va storto (lo fa sempre) nella scatola nera di cui sopra. Troverai molti disclaimer allegati agli accordi di licenza di terze parti, "l'uso a proprio rischio" è uno che vedo spesso. Le sabbie del tempo si spostano rapidamente e solo perché qualcuno dice che il codice è 1.0 non significa più jack. – WeNeedAnswers

+0

Questo non è veramente rilevante per quasi tutti i moduli nodo, in quanto sono open source. – Tyrsius

6

La risposta di Donald è buona: una volta entrato nel modello a cipolla del middleware di connessione, è necessario prendere una decisione sul tipo di sessione di archiviazione da utilizzare. Quello predefinito in espresso è un MemoryStore e non è destinato all'uso in produzione. Ecco alcune delle vostre scelte:

Mongohttps://github.com/mikkel/express-session-mongo - Assicurarsi di utilizzare l'opzione 'native_parser: false'

Redishttps://github.com/visionmedia/connect-redis - Molto bene, ma se non si utilizza già Redis per pub/sub o storage potrebbe non essere l'ideale.

Nota, ci sono altre scelte: dipende dal tuo progetto. Cerca qualcosa che puoi introdurre sfruttando il tuo stack tecnologico esistente.

+3

Voglio concentrarmi su "Il default in espresso è un MemorySrote, e non è destinato all'uso in produzione". Vai a http://engineering.linkedin.com/nodejs/blazing-fast-nodejs-10-performance-tips-linkedin-mobile e leggi il punto 7. – guiomie

+4

Questo è interessante, quindi come gestiresti le autorizzazioni degli utenti se non mantenendo le sessioni ? – Costa

Problemi correlati