2015-05-25 9 views
7

Ho difficoltà a capire in che modo node.js serve il contenuto dinamico. Quindi diciamo che abbiamo il seguente codice che rende una home page:Elaborazione di pagine Web dinamiche con Node.js

var express = require('express'), 
    app = express(); 

app.get('/', function(req,res){ 
    res.render('home.html'); 
}); 

Tuttavia, diciamo che questa home page doveva essere un profilo utente in cui si sta tirando le informazioni utente da un database, che si traduce in codice:

var express = require('express'), 
    mongoose = require('mongoose'), 
    app = express(); 

mongoose.connect('mongodb://localhost/ExampleDB'); 

app.get('/:id', function(req,res){ 
    User.findOne({_id: req.id}, function (err, user){ 
     var name = user.name; 
     var profilePic_uri = user.profilePic_uri; 
     res.render('home.html'); 
}); 

Così, idealmente home.html è solo un modello di pagina, in cui si imposta forse la foto del profilo dell'utente, il loro nome, ecc nel gestore percorso. Giusto, perché l'idea alla base del nodo, è che questa app.js dovrebbe essere in grado di gestire l'estrazione del contenuto dinamico da un database in fase di esecuzione. Dove sto avendo problemi è capire come esattamente il rendering delle pagine dinamiche funziona con il nodo. La pagina html è una pagina statica. Non puoi davvero rendere un php o una pagina asp perché, beh, questo non ha senso, vero?

Che mi lascia con la domanda, come è fatto?

+0

È tue domande su node.js o come espresso rende contenuti dinamici? – digwig

risposta

4

Nel tuo caso la pagina è statica. Qui entra in gioco template engine (visualizza motori), con questo è possibile rendere il contenuto della pagina dinamico.

Alcuni dei motori di template che ricordo ora sono vash (è come la sintassi del rasoio di MVC, lo adoro) e jade. Ce ne sono più di loro.

Nota: Si possono trovare nei link che ho fornito come integrarli con esprimono.

+0

Sono un po 'familiare con la giada. La loro sintassi è un po 'confusa per me personalmente. Tuttavia, con jade, dalla mia comprensione si passa in qualcosa come res.render ('home.jade', {name = user.name, profilePic = user.profilePic}.) ;. Si noti che questo è un sudocode molto approssimativo a causa della non familiarità con la giada e la sua sintassi. In tal caso, stai dicendo che questo approccio è il modo in cui vengono pubblicate le pagine dinamiche? – cg14

+0

@ cg14 Esattamente, questo è il modo in cui passi i dati alla pagina. Devi solo usarlo nella pagina. Ciò renderà la pagina di rendering diversi dati in base alla richiesta. – adricadar

1

Quello che stai realmente chiedendo non è, come funziona nel nodo, ma come Express rende i template. Una volta compreso che stai effettivamente utilizzando una funzione del modulo Express, probabilmente sei più consapevole di ciò che devi cercare per ottenere la documentazione corretta.

In breve: Express presenta un motore di rendering modello che fa il lavoro per voi, molto simile a ciò che fanno ASP o PHP.

Per conoscere Nodo, consiglierei di provare a creare qualcosa senza prima tutte le librerie, solo per conoscere la piattaforma, e per capire perché è possibile utilizzare tali librerie o framework (come express) .

+0

Quindi stai dicendo che un motore di rendering template è la soluzione? In tal caso, per chiedere nuovamente la tua domanda in un certo senso, in che modo Express rende i modelli? – cg14

+1

Sì, è possibile utilizzare un motore di template con Express. Ci sono molte opzioni là fuori, il mio preferito è Swig. Controlla i [documenti] (http://expressjs.com/guide/using-template-engines.html) come installare e configurare i modelli (o come li chiamano, "viste"). –

7

Se si aggiunge ...

app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

... dopo app = Express() è stato fatto allora sarà ora di default per il motore di rendering di Giada, se non si utilizza una proroga. Poi, nel tuo router:

app.get('/', function(req,res){ 
    res.render('home', { 
    var1: 'val1', 
    var2: 'val2' 
    }); 
}); 

Avresti bisogno di aggiungere Jade nel file package.json del progetto nelle dipendenze:

"jade": "~1.9.1", 

... e poi "NPM install" nella cartella di Portalo.

Quindi avresti bisogno di un file chiamato/views/home.giada con il contenuto:

doctype html 
html 
    body 
    p Var1 is #{var1} 
    p Var2 is #{var2} 

Si dovrebbe vedere - quando si visita la pagina iniziale - che i valori sono stati passati al motore di rendering di Giada e ampliato in atto nel modello come 'val1' e 'val2 ', rispettivamente.

0

È possibile utilizzare il modulo [Templatesjs]1 a rendere dati

questo modulo dinamico fa il lavoro che si desidera facilmente, è possibile rendere i dati dinamici in formato HTML pagina che utilizzano questo.

lasciate che vi mostri un esempio:

<html> 
    <body> 
    Welcome Dear <%username%> 
    <img src="img/<%pic_url%>" /> 
    </body> 

</html> 

Ora dobbiamo rendere nome e pic_url nella pagina. nei vostri codici Node.JS

var express = require('express'), 
    mongoose = require('mongoose'), 
    app = express(), 
    tj = require('templatesjs'); 

mongoose.connect('mongodb://localhost/ExampleDB'); 

app.get('/:id', function(req,res){ 
    User.findOne({_id: req.id}, function (err, user){ 
     var name = user.name; 
     var profilePic_uri = user.profilePic_uri; 
     var data = fs.readFileSync('./home.html'); 

     //now do the main thing 

     tj.set(data); // invoke templatesjs with data 
     var output = tj.render("username",name); // this will replace <%username%> with actual username 

     output = tj.render("pic_url",profilePic_uri); 
     res.write(output); 
     res.end() 
}); 

Ora si è fatto. Si può avere un buon aiuto da here

Speranza

Problemi correlati