IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

Débuter avec Node


Sujet :

NodeJS

  1. #41
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    erci pour le conseil avec nodemon, je vais regarder ça, ça semble bien utile effectivement ;-)
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

  2. #42
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Ok, j'ai ça maintenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
        http://www.slate.fr/story/98493/reformes
        http://www.slate.fr/story/98505/pays-non-colonises-puissances-europeennes
        http://www.slate.fr/story/98501/mosquees-autriche-financements-etrangers
        http://www.slate.fr/story/98391/vacances-neige-ski-environnement
        http://www.slate.fr/story/98497/scene-sexe-cinema
        http://www.slate.fr/story/98477/rouart-hommage-peintres-meconnus
        http://www.slate.fr/story/98495/pourquoi-sacha-pokemon
        http://www.slate.fr/story/98417/brevets
        http://www.slate.fr/story/98315/aide-france-arabie-saoudite-liban
        http://www.slate.fr/story/98471/animaux-chien-tres-courte-memoire
    Donc maintenant, il faut que j'adapte le code pour voir ce que je peux afficher des flux ?
    Merci beaucoup pour tout, je vais voir si j'arrive à faire ça. RTFM de nouveau ;-)
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

  3. #43
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Il suffit en fait, dans la page test.ejs, de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <ul>
    <% for(var i=0; i<items.length; i++) {%>
       <li><%= items[i].title %></li>
    <% } %>
    </ul>
    En remplaçant title par une des propriétés disponibles si je comprends bien. Par contre, link, origlink et permalink n'affiche rien.

    Sur la doc, il y a les meta properties et articles properties. Là, se sont les articles properties que j'affiche non ? J'ai essayé avec meta au lieu de item, mais ça ne fonctionne pas.
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

  4. #44
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    Ok, ton parser parse bien le flux rss et te renvoi la liste d'item sous forme d'objet javascript.

    Voici un exemple de flux RSS.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?xml version="1.0" encoding="UTF-8"?>
    <rss version="2.0">
        <channel>
            <title>Mon site</title>
            <description>Ceci est un exemple de flux RSS 2.0</description>
            <lastBuildDate>Sat, 07 Sep 2002 00:00:01 GMT</lastBuildDate>
            <link>http://www.example.org</link>
            <item>
                <title>Actualité N°1</title>
                <description>Ceci est ma première actualité</description>
                <pubDate>Sat, 07 Sep 2002 00:00:01 GMT</pubDate>
                <link>http://www.example.org/actu1</link>
            </item>
            <item>
                <title>Actualité N°2</title>
                <description>Ceci est ma seconde actualité</description>
                <pubDate>Sat, 07 Sep 2002 00:00:01 GMT</pubDate>
                <link>http://www.example.org/actu2</link>
            </item>
        </channel>
    </rss>
    Dans la vue on a spécifié qu'on veux afficher le champs link mais maitenant tu peux afficher les autres (title, description, pubDate).

  5. #45
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    Si tu regarde ton fichier app.js, on a créer une variable "meta"...
    Déclare la en global comme "items" puis passe la à la vue (comme items...).

    Ensuite tu pourras l'afficher dans la vue.

  6. #46
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    J'ai essayé de faire avec meta ce que j'ai fais avec item :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    // nodemon
     
    var express = require('express');
    var app = express();
     
    var FeedParser = require('feedparser')
    var request = require('request');
     
    var req = request('http://www.slate.fr/rss.xml')
    var feedparser = new FeedParser();
     
    var items = [];
    var meta = [];
     
    req.on('error', function (error) {
        // handle any request errors
    });
    req.on('response', function (res) {
        var stream = this;
     
        if (res.statusCode != 200) return this.emit('error', new Error('Bad status code'));
     
        stream.pipe(feedparser);
    });
     
     
    feedparser.on('error', function(error) {
        // always handle errors
    });
    feedparser.on('readable', function() {
        // This is where the action is!
        var stream = this;
        var meta = this.meta;
        var item = {}; 
     
        var meta = {};
        while (meta = stream.read()) {
          meta.push(meta);
        }
     
        while (item = stream.read()) {
            items.push(item);
        }    
     
    });
     
    app.get('/test', function(req, res) {
       console.log(items);
       res.render('test.ejs', {items: items});
    });
     
    app.get('/', function(req, res) {
        res.render('index.ejs');
    });
     
    app.get('/sous-sol', function(req, res) {
        res.setHeader('Content-Type', 'text/plain');
        res.end('Vous êtes dans le sous-sol');
    });
     
    app.get('/etage/salon', function(req, res) {
        res.render('salon.ejs', {etage: req.params.etagenum});
    });
     
    app.use(function(req, res, next){
        res.setHeader('Content-Type', 'text/plain');
        res.status(404).send('Page introuvable !');
    });
     
     
    app.listen(8080);
    Et ma page test.ejs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <ul>
    <% for(var i=0; i<meta.length; i++) {%>
       <li><%= meta[i].link %></li>
    <% } %>
    </ul>
    Mais j'ai meta is not defined
    dans la page test.ejs
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

  7. #47
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    Ok, bon en fait dans le code il y avait la ligne
    Donc tu n'avais pas à faire un while avec le stream.read.
    J'ai supprimé 2 déclaration de variables meta en trop dans app.js.
    De plus tu n'a pas passé la variable meta à la vue, du coup c'était pas possible de l'afficher.


    app.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    var express = require('express');
    var app = express();
     
    var FeedParser = require('feedparser')
    var request = require('request');
     
    var req = request('http://www.slate.fr/rss.xml')
    var feedparser = new FeedParser();
     
    var items = [];
    var meta = {};
     
    req.on('error', function (error) {
        // handle any request errors
    });
    req.on('response', function (res) {
        var stream = this;
     
        if (res.statusCode != 200) return this.emit('error', new Error('Bad status code'));
     
        stream.pipe(feedparser);
    });
     
     
    feedparser.on('error', function(error) {
        // always handle errors
    });
    feedparser.on('readable', function() {
        // This is where the action is!
        var stream = this;
        meta = this.meta;
        var item = {};
     
        while (item = stream.read()) {
            items.push(item);
        }
     
    });
     
    app.get('/test', function(req, res) {
        console.log(meta);
        res.render('test.ejs', {
            items: items,
            meta: meta
        });
    });
     
    app.get('/', function(req, res) {
        res.render('index.ejs');
    });
     
    app.get('/sous-sol', function(req, res) {
        res.setHeader('Content-Type', 'text/plain');
        res.end('Vous êtes dans le sous-sol');
    });
     
    app.get('/etage/salon', function(req, res) {
        res.render('salon.ejs', {etage: req.params.etagenum});
    });
     
    app.use(function(req, res, next){
        res.setHeader('Content-Type', 'text/plain');
        res.status(404).send('Page introuvable !');
    });
     
     
    app.listen(8080);
    Meta semble être un objet, donc au niveau de la vue tu n'a pas besoin de boucler avec un for...

    test.ejs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <h2> <%=  meta.title %> </h2>
    <ul>
        <% for(var i=0; i<items.length; i++) {%>
        <li><%= items[i].link %></li>
        <% } %>
    </ul>
    Tu semble patoger un peux entre les différents type de données en JavaScript. Essaye peut-être de regarder un peux les tableaux et les objets...

  8. #48
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Si je comprends bien, les articles (leur propriétés) et les meta (leur propriétés) sont de 2 types différents, c'est pour cela qu'on y accède pas de la même manière. Je vais regarder les tableaux, objets, etc, ça ne me fera pas de mal effectivement.

    Il ne manque pas une virgule après :

    En tous cas, merci beaucoup pour toute ton aide, tes conseils et ta patience, ça m'a beaucoup aidé.
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

  9. #49
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    Non il ne manque pas de virgule

    Les objects javascript s'écrivent comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var monObject = {
      propriete1 : "quelque chose",
      propriete2 : "autre chose",
      tutu : 1,
      toto: 3,
      tata: null
    };
    On ne met pas de virgule après la dernière propriété et on y accède comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    console.log(monObject.propriete1);
    console.log(monObject["propriete1"]);
    console.log(monObject['propriete1']);
    Il y a plusieurs facons de créer des objets mais celle la est la plus simple à comprendre....

  10. #50
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    D'accord, merci. Il faut vraiment que je regarde les types de données...

    Donc, dans la console, je pourrais afficher les propriétés des meta comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    console.log(meta["author"]);
    J'avoue que je ne comprends pas trop la différence entre les meta properties et les articles properties de feedparser.
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

  11. #51
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    C'est assez simple, si tu regarde le xml d'un rss, la meta semble correspondre à l'intérieur de la balise channel sauf les balises "item" qui sont les items.

  12. #52
    Membre habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Merci pour tout. Je passe en résolu puisque j'ai réussi ce que je voulais.

    Je vais bientôt revenir, mon prochain essai, c'est de convertir une page HTML en PDF, via PhantomJS certainement.

    Encore merci, et sûrement à bientôt ;-)
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/03/2012, 18h09
  2. Réponses: 0
    Dernier message: 12/03/2012, 14h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo