2013-04-02 4 views
0

Je suis un débutant au nœud, essayant juste d'utiliser le moteur de template Jade, j'ai lu ReadMe sur la page github, et je me suis retrouvé avec l'idée que cela devrait travail:Essayer de comprendre comment utiliser Jade avec Node.js

var http = require('http'), 
    jade = require('jade'), 
fn = jade.compile('html p hello'); 

function onRequest(req, res) { 
    res.writeHead(200, {"Content-Type": "text/html"}); 
    res.write('Hello World!'); 

    fn; 


    res.end(); 
} 

http.createServer(onRequest).listen(8888); 
console.log('Server started.'); 

Mais il n'a pas, quelqu'un pourrait-il me expliquer ce que je fais mal? Merci beaucoup!

+0

Il est autamagic pas, vous devez écrire le jade compilé dans la réponse –

Répondre

0

Cette ligne de code:

fn; 

& hellip; ne remet pas fn. Il récupère la valeur dans la variable fn, puis la supprime, sans rien faire avec. , Vous voulez au lieu de l'appeler et utiliser sa valeur de retour comme argument pour res.end:

res.end(fn()); 

De plus, html p hello ne fait pas ce que vous pensez qu'il fait: il pense que vous voulez une étiquette, html, avec le texte p hello dedans. Ce n'est pas ce que tu veux. Vous devez utiliser les nouvelles lignes et indentation correcte, puis il va travailler:

html 
    p hello 

Par ailleurs, si vous allez utiliser Jade, vous voudrez peut-être de ne pas avoir que étrangers

res.write("Hello World!"); 
+0

Merci pour la réponse, cela fonctionne! Je vais choisir la réponse dans une minute dès qu'il est prêt, et oui le monde de salut était juste pour s'assurer que le serveur fonctionnait – Datsik

2

Jade a besoin de sauts de ligne appropriés pour fonctionner. Et les sauts de ligne appropriés sont laids en javascript inline. (De plus, l'avantage de modéliser avec Jade est la séparation des préoccupations, par exemple aucune logique de vue dans votre code).

La meilleure façon de le faire est d'isoler votre modèle dans un fichier:

tpl.jade

doctype 5 
html 
    body 
    p hello 

index.js

var http = require('http') 
    , jade = require('jade') 
    , path = __dirname + '/tpl.jade' 
    , str = require('fs').readFileSync(path, 'utf8') 
    , fn = jade.compile(str, { filename: path, pretty: true }); 

function onRequest(req, res) { 
    res.writeHead(200, {"Content-Type": "text/html"}); 
    res.write(fn()); 
    res.end(); 
} 

http.createServer(onRequest).listen(8888); 
console.log('Server started.'); 
+0

Que fait __dirname ?, et joli:? – Datsik

+0

@XCritics, 'pretty' dit à Jade de produire une sortie agréable et indentée. __dirname est un global dans node.js qui fait référence au répertoire courant dans lequel se trouve le script en cours http://nodejs.org/docs/latest/api/globals.html#globals_dirname – methai