Node.js se développe rapidement; L'une des principales raisons à cela est que les développeurs ont créé des outils incroyables qui améliorent considérablement la productivité avec Node. Dans cet article, nous allons passer en revue l'installation de base d'Express, un framework de développement, et la création d'un projet de base avec celui-ci..
Node est similaire dans sa conception et influencé par des systèmes tels que Ruby's Event Machine ou Python's Twisted. Le nœud va un peu plus loin dans le modèle d'événement - il présente la boucle d'événement comme une construction de langage plutôt que comme une bibliothèque..
Dans ce didacticiel, nous allons parcourir la page d'accueil de YouTube, obtenir toutes les miniatures de taille normale de la page, ainsi que des liens et la durée de la vidéo, envoyer tous ces éléments à un modèle jQueryMobile et lire les vidéos à l'aide de YouTube Embed beau travail de détection du support de périphérique (flash / html5-video).
Nous allons aussi apprendre à commencer à utiliser npm et Express, Le processus d'installation des modules de npm, le routage Express de base et l'utilisation de deux modules de Node: demande
et jsdom
.
Pour ceux d'entre vous qui ne connaissent pas encore Node.js et comment l'installer, veuillez vous reporter à la page d'accueil de node.js.
et la page du projet npm GitHub.
Vous devriez également vous référer à notre série "Node.js: Step by Step".
Remarque: Ce tutoriel nécessite et suppose que vous compreniez ce qu'est Node.js et que vous avez déjà installé node.js et npm..
En quoi consiste exactement Express? Selon ses développeurs, c'est un…
Infrastructure de développement Web JavaScript extrêmement rapide (et petite) côté serveur, basée sur Node and Connect.
Ça a l'air cool, non? Utilisons npm pour installer express. Ouvrez une fenêtre de terminal et tapez la commande suivante:
npm install express -g
En passant -g
en tant que paramètre de la commande install, nous demandons à npm de procéder à une installation globale du module.
j'utilise / home / node-server / nettuts
pour cet exemple, mais vous pouvez utiliser tout ce avec quoi vous êtes à l'aise.
Après avoir créé notre projet express, nous devons utiliser npm pour installer les dépendances express..
cd nodetube npm install -d
Si cela se termine par "ok", alors vous êtes prêt à partir. Vous pouvez maintenant exécuter votre projet:
noeud app.js
Dans votre navigateur, allez à http: // localhost: 3000
.
Une implémentation JavaScript du DOM W3C.
Retournez à votre terminal et, après avoir arrêté votre serveur actuel (ctr + c), installez jsdom
:
npm installer jsdom
Méthode de requête HTTP simplifiée.
Tapez ce qui suit dans le terminal:
demande d'installation npm
Tout devrait être configuré maintenant. Maintenant, il est temps d'entrer dans un code réel!
Commençons par inclure toutes nos dépendances. Ouvrez votre app.js
fichier, et, dans les toutes premières lignes, ajoutez le code suivant:
/ ** * Dépendances du module. * / var express = require ('express'), jsdom = require ('jsdom'), request = require ('request'), url = require ('url'), app = module.exports = express.createServer () ;
Vous remarquerez qu'Express a créé du code pour nous. Ce que vous voyez dans app.js
est la structure la plus élémentaire d’un serveur de nœud utilisant Express. Dans notre précédent bloc de code, nous avions dit à Express d'inclure nos modules récemment installés: jsdom
et demande
. De plus, nous incluons le module d'URL, qui nous aidera à analyser l'URL de la vidéo que nous allons extraire de YouTube ultérieurement..
Dans app.js
, recherchez la section "Routes" (autour de la ligne 40) et ajoutez le code suivant (lisez les commentaires pour comprendre ce qui se passe):
app.get ('/ nodetube', fonction (req, res) // Indiquez à la demande que nous voulons extraire youtube.com, envoyez les résultats à une demande de fonction de rappel (uri: 'http://youtube.com ', fonction (err, réponse, corps) var self = this; self.items = new Array (); // je sens que je veux enregistrer mes résultats dans un tableau // une simple vérification d'erreur fondamentale si (err && response.statusCode! == 200) console.log ('Erreur de requête.'); Envoyez le paramètre body comme le code HTML que nous analyserons dans jsdom // indiquons également à jsdom de joindre jQuery dans les scripts et chargé de jQuery.com jsdom.env (html: body, scripts: ['http://code.jquery.com/jquery-1.6.min.js']], function (err, window) // Utiliser jQuery simplement comme dans une page HTML normale var $ = window.jQuery; console.log ($ ('title'). text ()); res.end ($ ('title'). text ());)) ;);
Dans ce cas, nous extrayons le contenu de la page d'accueil de YouTube. Une fois terminé, nous imprimons le texte contenu dans la balise de titre de la page (
noeud app.js
Dans votre navigateur, allez à: http: // localhost: 3000 / nodetube
Vous devriez voir "YouTube - Broadcast Yourself", le titre de YouTube..
Maintenant que tout est configuré et opérationnel, il est temps d’obtenir des URL de vidéos. Accédez à la page d'accueil YouTube et cliquez avec le bouton droit de la souris sur l'une des vignettes de la section "Vidéos recommandées". Si vous avez installé Firebug (ce qui est fortement recommandé), vous devriez voir quelque chose comme ce qui suit:
Il existe un modèle que nous pouvons identifier et qui est présent dans presque tous les autres liens vidéo classiques:
div.vide-entry span.clip
Concentrons-nous sur ces éléments. Retournez dans votre éditeur, et dans app.js
, ajoutez le code suivant à la / nodetube
route:
app.get ('/ nodetube', fonction (req, res) // Indiquez à la demande que nous voulons extraire youtube.com, envoyez les résultats à une demande de fonction de rappel (uri: 'http://youtube.com ', fonction (err, réponse, corps) var self = this; self.items = new Array (); // je sens que je veux enregistrer mes résultats dans un tableau // une simple vérification d'erreur fondamentale si (err && response.statusCode! == 200) console.log ('Erreur de requête.'); Envoyez le paramètre body comme le code HTML que nous analyserons dans jsdom // indiquons également à jsdom de joindre jQuery dans les scripts jsdom. env (html: body, scripts: ['http://code.jquery.com/jquery-1.6.min.js'], function (err, window) // Utilisez jQuery exactement comme dans n'importe quelle page HTML normale var $ = window.jQuery, $ body = $ ('body'), $ videos = $ body.find ('. video-entry'); // Je sais que les éléments .video-entry contiennent les vignettes de taille normale // pour chacun des éléments .video-entry trouvés $ videos.each (fonction (i, item) // je vais utiliser les sélecteurs jQuery classiques var $ a = $ (item) .children ('a'), // premier ancre élément qui est les enfants de notre élément .video-entry $ title = $ (item) .find ('. video-title .video-long-title'). text (), // titre de la vidéo $ time = $ a.find (' .video-time '). text (), // durée de la vidéo $ img = $ a.find (' span.clip img '); // miniature // et ajoute toutes ces données à mon tableau d'éléments self.items [i] = href: $ a.attr ('href'), titre: $ title.trim (), heure: $ heure, // il existe certaines choses avec les vignettes vidéo youtube, les images dont l'attribut data-thumb est défini utilisent l'url de l'attribut mentionné précédemment comme src pour la vignette, sinon // il utilisera l'attribut src fourni par défaut. thumbnail: $ img.attr ('data-thumb')? $ img.attr ('data-thumb'): $ img.attr ('src'), urlObj: url.parse ($ a.attr ('href'), true) // parse notre URL et la chaîne de requête comme bien ; ); // voyons ce que nous avons console.log (self.items); res.end ('Terminé'); ); ); );
Il est temps de redémarrer notre serveur une fois de plus et de recharger la page dans notre navigateur (http: // localhost: 3000 / nodetube). Dans votre terminal, vous devriez voir quelque chose comme ce qui suit:
Cela a l'air bien, mais nous avons besoin d'un moyen d'afficher nos résultats dans le navigateur. Pour cela, je vais utiliser le moteur de template Jade:
Jade est un moteur de template hautes performances fortement influencé par Haml, mais implémenté avec JavaScript pour Node..
Dans votre éditeur, ouvrez views / layout.jade
, qui est la structure de présentation de base utilisée lors du rendu d'une page avec Express. C'est bien mais il faut le modifier un peu.
!!! 5 html (lang = 'en') tête meta (jeu de caractères = 'utf-8') meta (nom = 'viewport', content = "initial-scale = 1, maximum-scale = 1") title = title link (rel = 'stylesheet', href = "http://code.jquery.com/mobile/1.0b3/jquery.mobile-1.0b3.min.css") script (src = 'http: //code.jquery.com/ jquery-1.6.2.min.js ') script (src =' http: //code.jquery.com/mobile/1.0b3/jquery.mobile-1.0b3.min.js ') body! = body
Si vous comparez le code ci-dessus avec le code par défaut dans layout.jade
, vous remarquerez que quelques éléments ont changé: doctype, la balise méta de la fenêtre d'affichage, le style et les balises de script fournies par jquery.com. Créons notre vue liste:
Avant de commencer, veuillez parcourir la documentation de jQuery Mobile (JQM à partir de maintenant) sur les mises en page et l'anatomie..
L'idée de base est d'utiliser une liste de vues JQM, une vignette, un titre et une étiquette de durée de la vidéo pour chaque élément de la liste, ainsi qu'un lien vers une page vidéo pour chacun des éléments répertoriés..
Remarque: Faites attention à l'indentation que vous utilisez dans vos documents Jade, car elle n'accepte que des espaces ou des tabulations, mais pas les deux dans le même document..
div (data-role = 'page') en-tête (data-role = 'header') h1 = titre div (data-role = 'content') // vérification de base, nous aurons toujours des éléments de youtube bien que - if ( items.length) // crée un wrapper listview ul (data-role = 'listview') // pour chaque élément collecté - items.forEach (fonction (item) // crée un li li // et un lien utilisant notre passé urlObj Objet a (href = '/ watch /' + item ['urlObj']. query.v, title = item ['title']) // et une vignette img (src = item ['thumbnail'], Alt = "Vignette") // libellé titre et heure h3 = élément ['titre'] h5 = élément ['heure'] -)
C'est tout ce dont nous avons besoin pour créer notre liste. Retourner à app.js
et remplacez le code suivant:
// voyons ce que nous avons console.log (self.items); res.end ('Terminé');
avec ça:
// Nous avons tout ce que nous sommes venus chercher, rendons maintenant notre vue res.render ('list', title: 'NodeTube', items: self.items);
Redémarrez votre serveur une fois de plus et rechargez votre navigateur:
Remarque: Comme nous utilisons jQuery Mobile, je vous recommande d’utiliser un navigateur Webkit ou un téléphone portable iPhone / Android (simulateur) pour obtenir de meilleurs résultats..
Créons une vue pour notre /regarder
route. Créer vues / video.jade
et ajoutez le code suivant:
div (data-role = 'page') en-tête (data-role = 'header') h1 = titre div (data-role = 'content') // Notre vidéo div div # video // Iframe de youtube qui sert le droit Objet multimédia pour le périphérique utilisé iframe (width = "100%", height = 215, src = "http://www.youtube.com/embed/" + vid, frameborder = "0", allowfullscreen)
Encore une fois, retournez à votre terminal, redémarrez votre serveur, rechargez votre page et cliquez sur l'un des éléments répertoriés. Cette fois, une page vidéo sera affichée et vous pourrez lire la vidéo intégrée.!
Il existe des moyens de garder notre serveur actif en arrière-plan, mais je préfère un de ceux-ci, appelé Forever, un module de noeud que nous pouvons facilement installer à l'aide de npm
:
npm installer pour toujours -g
Cela installera globalement Forever. Commençons notre application nodeTube:
pour toujours démarrer app.js
Vous pouvez également redémarrer votre serveur, utiliser des fichiers journaux personnalisés, transmettre des variables d’environnement, entre autres choses utiles:
// lancez votre application en mode production NODE_ENV = production démarrez depuis le début app.js
J'espère avoir démontré à quel point il est facile de commencer à utiliser Node.js, Express et npm. De plus, vous avez appris à installer des modules de nœud, à ajouter des itinéraires à Express, à récupérer des pages distantes à l'aide du module de requête, et à de nombreuses autres techniques utiles..
Si vous avez des commentaires ou des questions, s'il vous plaît faites le moi savoir dans la section commentaires ci-dessous!