Partage

Cours Node.js : c'est parti !

12 août 2014 à 15:51:30

On utilise if(!obj)  (Quand obj n'est pas un booléen) pour tester si un objet null/undefined

if(!req.session.todolist){
        req.session.todolist = [];
    }



-
Edité par unnamed38 12 août 2014 à 15:53:36

FuelDB => Base de donnée web temps réel avec websocket(Presentation)
12 août 2014 à 16:13:12

Merci pour la réponse mais j'ai toujours la même erreur, j'ai aussi pensé que ça pouvait venir de la mais visiblement non :/
12 août 2014 à 16:31:18

Hello,

A vu de nez, je pense que ton "req.session" est undefined... de fait, ta propriété req.session.todolist te lève une erreur.

Tente un "console.log(req.session)" pour confirmer :)

A plus tard !

Apprendre peut être long et difficile, mais abandonner n'accélère certainement pas le processus.
12 août 2014 à 16:33:12

euh oui desolé, c'est req.session qui n'existe pas, ce qui signifie je pense que ta session a mal été configuré avec le:

app.use(session({secret: "topsecret", saveUninitialized: true, resave: true }))

Je connais pas express mais regarde dans la doc comment faire ;-)

FuelDB => Base de donnée web temps réel avec websocket(Presentation)
12 août 2014 à 16:50:33

Effectivement, le console.log n'affiche rien dans la console, l'erreur vient bien de la.

Je continuerai ca plus tard, merci de votre aide !

12 août 2014 à 16:56:24

Hello Maastok,

Je viens de penser à quelque chose : tes routes ne sont pas initialisées quand tu fais ton USE.

La Session est créée lorsqu'un utilisateur accède à une route, ton "app.use(insertion de todolist dans req.session)" doit donc se trouver après.

Essaye ça, je pense que ça devrait débloquer ta situation.

Apprendre peut être long et difficile, mais abandonner n'accélère certainement pas le processus.
13 août 2014 à 9:49:47

Bonjour, je viens de finir le cours node.js et tout fonctionne à merveille.

Toutefois, j'ai un problème lorsque j'essai de le déployer sur mon site.

En local, je faisais une écoute sur le port 412 avec la connexion au socket.io sur localhost:412. Idem sur mon serveur web, avec ipserveur:412, tout fonctionnait à l'adresse ipserveur:42/index.html, le chat était en ligne.


Je veux maintenant le déployer sur mon site web. Comment faire sachant que celui ci écoute sur le port 80 de base ? J'ai tenté de remplacé le server.listen(412) par server.listen(80) mais cela ne fonctionne pas.

Quelle est la solution du coup ?
13 août 2014 à 10:15:52

@a49p 

ton site est en local? est ce que tu fait tourner un serveur web à coté de node.js? est ce que tu as mis ton site sur un hébergeur qui fonctionne avec node js?

Si tu t'es fait un serveur local que tu as déjà un site qui tourne et que tu viens d'installé node.js ton application est en conflit avec ton site ...

Il faudrait que tu  fasse écouter ton appli sur un autre port (8080 par exemple) et dans ce cas tu fais une redirection ou tu met dans ton site un lien avec le port inclue dedans....

ou mieux tu refais tout ton site avec node....

http://www.grafikart.fr/tutoriels/nodejs/nodejs-socketio-tchat-366

dans le tuto il fait marcher de front node.js et un serveur web si cela t’intéresse ....

sans reprendre le tuto en entier tu devrais avoir une solution... (à peu près à la 9ème minute sur la vidéo.... mouais ce qu'il fait c'est pas top

<script src="http://localhost:1337/socket.io/socket.io.js"></script>

mais l'idée n'est pas trop loin de ca...)

autrement si tu recherche un serveur mutualisé on en parlait déjà sur la page 1 de ce forum

-
Edité par CQEadsurf 13 août 2014 à 11:10:09

L’éternel débutant...
13 août 2014 à 14:17:43

Hello, 

CQE, si ça t'intéresse, y a un tableau (totalement illisible mais tu peux facilement récupérer le contenu pour mettre ça au propre) des hébergeurs dans le github de node.

Bonne journée !

-
Edité par Airin 13 août 2014 à 14:18:06

Apprendre peut être long et difficile, mais abandonner n'accélère certainement pas le processus.
13 août 2014 à 19:02:57

Salut Airin,

Après presque 2 jours j'ai trouvé mon erreur, et la je sais pas si on peut faire plus con: j'inversé req et res dans les arguments de mes fonctions par rapport au tuto :honte: Sans commentaires ok ? Je suis déjà suffisament dégoûté  x)

Merci à tous pour votre aide !

13 août 2014 à 21:26:43

Bizarre... car en reprenant ton code (en le tapant moi même donc sans inverser) je plantais aussi tant que je ne plaçais pas ce "use" après mes routes... ... ... je revérifierai tiens...

Tant mieux en tout cas :)

Au moins, tu y penseras pour la prochaine fois !

Bonne soirée !

-
Edité par Airin 14 août 2014 à 8:24:29

Apprendre peut être long et difficile, mais abandonner n'accélère certainement pas le processus.
20 août 2014 à 11:58:48

@a49p

Ce matin je viens de découvrir ceci en esperant que ca puisse t'apporter une solution a ton projet....

______

Je me demande si ça peut marcher avec WAMP ....? :-°

______

Vaut il pas mieux ça aussi ? (en changeant le port d’écoute d'apache...)

-
Edité par CQEadsurf 20 août 2014 à 12:07:13

L’éternel débutant...
22 août 2014 à 23:13:18

Bonsoir,

Je suis en train de réaliser le tchat du tutoriel, mais j'ai toujours un problème avec socket.io, j'ai cherché sur le net mais je n'ai toujours pas réussi à le résoudre; mon code ne contient pas d'erreur, mais mon socket.io ne renvoie aucune information dans la console.

Voici mon code js:

var http = require("http");
var fs = require("fs");

//création deu serveur
var server = http.createServer(function(req, res){
	/*fs.readFile("index.html", "utf-8", function(error, content){
		res.writeHead(200, {"Content-Type": "text/html"});
		res.end(content);
	});*/
	console.log("Un utilisateur a affiché la page !");
	res.end("Hello world");
});

server.listen(8080);
//chargement du socket.io
var io = require("socket.io").listen(server);

Et mon code html:

<!doctype html>
<html>
	<head>
	  <meta charset="utf-8">
	  <title>Socket io</title>
	</head>

	<body>
		<h1>Communication avec socket io</h1>
		<p>
			<input type="button" value="Embêter le serveur" id="poke" />
		</p>

		<script type="text/javascript" src="http://localhost:8080/socket.io/socket.io.js"></script>

		<script type="text/javascript">
			var socket = io.connect("http://localhost:8080");
		</script>
	</body>
</html>

Bien entendu, j'ai bien installé socket.io via npm.

Merci :)

24 août 2014 à 0:04:06

Salut,

Le log de la l.10 s'affiche dans la console ?

Parce que, je te ferais remarquer que la variable io est censée être utilisée pour créer des gestionnaires d’événements qui réagiront à la connexion effectuée en l.17 de ton HTML, par exemple...

-
Edité par a5er 24 août 2014 à 0:12:25

24 août 2014 à 2:25:06

Bonsoir,

Oui le log s'affiche bien dans la console, c'est pour ça que je comprend pas d'où vient le problème.

24 août 2014 à 11:39:16

@Maastok: ton code:

var http = require("http");
var fs = require("fs");
 
//création deu serveur
var server = http.createServer(function(req, res){
    /*fs.readFile("index.html", "utf-8", function(error, content){
        res.writeHead(200, {"Content-Type": "text/html"});
        res.end(content);
    });*/
    console.log("Un utilisateur a affiché la page !");
    res.end("Hello world");
});
 
server.listen(8080);
//chargement du socket.io
var io = require("socket.io").listen(server);

le code de matéo21 :

var http = require('http');
var fs = require('fs');

// Chargement du fichier index.html affiché au client
var server = http.createServer(function(req, res) {
    fs.readFile('./index.html', 'utf-8', function(error, content) {
        res.writeHead(200, {"Content-Type": "text/html"});
        res.end(content);
    });
});

// Chargement de socket.io
var io = require('socket.io').listen(server);

// Quand on client se connecte, on le note dans la console
io.sockets.on('connection', function (socket) {
    console.log('Un client est connecté !');
});


server.listen(8080);

je vois quelques petites differences comme l'emplacement de "server.listen(8080);" l'appel de l'index.html. et encore un ou 2 truc....

je suppose que :

/*fs.readFile("index.html", "utf-8", function(error, content){
        res.writeHead(200, {"Content-Type": "text/html"});
        res.end(content);
    });*/
    console.log("Un utilisateur a affiché la page !");
    res.end("Hello world");

est une modificatif pour voir si localhost:8080 fonctionne? :p

 en reprenant ton code :

var http = require("http");
var fs = require("fs");
 
//création deu serveur
var server = http.createServer(function(req, res){
    fs.readFile("./index.html", "utf-8", function(error, content){
        res.writeHead(200, {"Content-Type": "text/html"});
        res.end(content);
    });
    console.log("Un utilisateur a affiché la page !");
});
 

//chargement du socket.io
var io = require("socket.io").listen(server);

server.listen(8080);

et la ca marche beaucoup mieux :p

il ne te restera plus qu'a ajouter (avant "server.listen(8080);"  ça va de soit...) :

// Quand on client se connecte, on le note dans la console
io.sockets.on('connection', function (socket) {
    console.log('Un client est connecté !');
});

pour que socket.io serve au moins a quelque chose (cette partie la attend une réponse de la page consulté sur localhost)

______

après test :

fs.readFile("index.html", "utf-8", function(error, content)

fonctionne aussi c'est donc juste le positionnement de "server.listen(8080);" qui t'a pourri la vie

-
Edité par CQEadsurf 24 août 2014 à 12:11:16

L’éternel débutant...
24 août 2014 à 14:54:05

Perso je craque je vais voir si je ne peux pas installer une VM ultralight (base debian/ubuntu) pour continuer les test de node js car certaines dépendances sous windows .... c'est pas ca !

il pleut des message de mise en garde voir des messages d'erreur dès qu'on essaie d'utiliser autre chose que express et socket.io >_<

L’éternel débutant...
25 août 2014 à 12:00:18

Bonjour CQEadsurf,

Merci pour ta réponse, j'ai remis de l'ordre dans mon code mais malgré ça, j'en suis toujours au même point: pas d'erreur mais toujours pas de message de la part de socket.io.

Par contre j'ai remarqué que le code suivant ne donne rien:

//quand un client se connecte, on le note dans la console
io.sockets.on("connection", function(socket){
	console.log("Un client est connecté !");
});

Aucun message ne s'affiche dans la console, je vais chercher de ce côté pour le moment mais si vous avez des pistes surtout n'hésitez pas :p

Merci !

25 août 2014 à 20:28:10

@Maastok : bizarre o_O... tu charge au moins la page HTML ? parce que ta page une fois chargé exécute :
        <script type="text/javascript">
            var socket = io.connect("http://localhost:8080");
        </script>

et c'est
//quand un client se connecte, on le note dans la console
io.sockets.on("connection", function(socket){
    console.log("Un client est connecté !");
});

qui reçois ta requête ...

Et ta page HTML : j'ai rien changé et ça marche ...

Et que se passe t'il quand tu fait un copié collé tout bête du code du cour ou le mien? (voir ci dessous, un simple CC , "sans essayer de recopier le code avec ses petit doigts" pour voir ce qui se passe)

var http = require("http");
var fs = require("fs");
 
//création deu serveur
var server = http.createServer(function(req, res){
    fs.readFile("index.html", "utf-8", function(error, content){
        res.writeHead(200, {"Content-Type": "text/html"});
        res.end(content);
    });
    console.log("Un utilisateur a affiché la page !");
});
 

//chargement du socket.io
var io = require("socket.io").listen(server);

// Quand on client se connecte, on le note dans la console
io.sockets.on('connection', function (socket) {
    console.log('Un client est connecté !');
});

server.listen(8080);



As tu essayé de "réinstaller" socket.io pour voir (npm uninstall / npm install) ?

(Question bête et absurde mais bon ...) Comment appelle tu ta page dans ton navigateur?

index.html est bien index.html il n'a pas un autre non ?

Je sais c'est une série de question connes mais à mon avis soit c'est une connerie bête qui bloque l’exécution de ta page soit c'est socket.io qui merde...

Parce que quand j'avais fait des corrections des exos P2P lors de ma première inscription, je m’étais aperçu que l'install des dépendances et la suppression des dossiers à l'arrache, à la longue mettait un bazar sur ce que j'avais fait.

(et... oui je me suis réinscrit parce que j’étais pas satisfait de ce que j'ai envoyé comme code sur l'éxo final ... bref passons)

______

j'ai refais à l'instant un test. ta page HTML (index.html) et le code que je viens de l’envoyé fonctionnent...

 (en appelant par localhost:8080)

-
Edité par CQEadsurf 25 août 2014 à 20:48:52

L’éternel débutant...
25 août 2014 à 23:23:44

@CQEadsurf: j'ai fait un copier coller de ton code, j'ai desinstallé puis réinstallé socket.io et toujours la même chose, pas de message dans la console.

Par contre à chaque fois que je charge la page, j'ai 2 fois "Un utilisateur a affiché la page" dans la console et je comprend pas pourquoi.

26 août 2014 à 0:28:02

@Maastok : "Un utilisateur a affiché la page" est du a ce code :

var server = http.createServer(function(req, res){
    fs.readFile("index.html", "utf-8", function(error, content){
        res.writeHead(200, {"Content-Type": "text/html"});
        res.end(content);
    });
    console.log("Un utilisateur a affiché la page !");
});

le tout c'est de savoir s'il affiche ta page web coté navigateur : est-ce le cas?

sinon ça explique pourquoi socket.io est "muet" c'est que ta page n'est pas appelée.

j'ai fait un autre test : j'ai lancé node et après j'ai lancer la page HTML qui se trouvait dans le dossier.

résultat du test : la page devrait demander malgré tout une requête au serveur node. et j'ai eu "Un client est connecté !"

est ce que c'est le cas chez toi? si c'est le cas c'est qu'il se passe quelque chose lorsque tu appelle ton HTML.

autre question est ce que ton index.html est dans le même dossier que ton appli ? ça aussi ça peut jouer...

_____

Sinon tu pourrait me dire en détail quel est ton processus de test? (juste par curiosité) comment se nomme ton fichier HTML et ou il se situe par rapport a ton fichier.js ? (p-e en retranscrivant ce que je te demande tu t’apercevra d'une énormité qui nous échappe)

______


Par contre à chaque fois que je charge la page, j'ai 2 fois "Un utilisateur a affiché la page" dans la console et je comprend pas pourquoi.



Ça aussi j'ai remarqué et ca c'est due p-e au fait que tu lance node.js alors que ton navigateur est sur la page "localhost". il n'est arrivé de lancer plusieurs fois node quand j'avais mon navigateur sur localhost et j'avais ce genre de bug (enfin si on peut appeler ça un bug...) et ca le fait surtout quand tu as module socket.io de lancé (enfin je crois, et ca m’amènerais à penser que : socket.io marche donc il y a une énormité que tu ne dévoile pas)

donc fait ce test : lance node.js et ouvre ton fichier html la ou il se trouve.(je radote ? c'est p-e l'age:p)

(et sinon tu as testé sur un autre navigateur? )



-
Edité par CQEadsurf 26 août 2014 à 1:18:06

L’éternel débutant...
29 août 2014 à 20:10:41

Bon je viens d'envoyer à nouveau mon code (que j'ai pu finaliser a 80%).

J'ai corrigé mes exo en même pas 5min, juste le temps de voir si ça marche, que l'install des dépendances se fasse que le code soit nickel...

Dommage qu'il n'y a pas de points d'originalité... ça pousserait p-e les gens a faire des efforts ... sur les 3 que j'ai corrigé (même les 6 vu que c'est ma 2eme participation) si ce point existait 1 seul l'aurait (juste un petit plus de rien du tout mais qui m'a fait dire que ce n'est pas le même exo que je corrige fonctionnellement parlant).

En espérant d'être corrigé aussi vite.

______

Apparemment ma note traine...:( On est plus pressé de recevoir les notes que corriger les TP...

-
Edité par CQEadsurf 1 septembre 2014 à 12:17:06

L’éternel débutant...
5 septembre 2014 à 20:31:34

Salut à tous,

Je n'ai pas reçu ma note pour un travail publié il y a une semaine, normal ?

Sinon chouette cours d'intro :)

6 septembre 2014 à 21:11:36

@Satblip

Bienvenu au club :p ça doit être le fait qu'on est 110 pinpins contre 3 513 sur HTML par exemple...

Comme c'est une nouvelle technologie encore peu connu basé sur un langage "bancale" et peu aimé, imposé par des barbus... ça ne m'étonne pas qu'il n'y ait pas foule pour suivre ce cours et encore moins sur le fait qu'on ne soit pas expressément corrigé (vu que la correction P2P s’appuie sur la participation des élevés)

(dsl je me suis emporté dans mon délire mais pour la correction P2P s'appuyant sur la participation des "élevés" j'ai pas faux :p)

sans parlé que pour couronner le tout j'ai mis de l'angular dans mon exo... c'est vrai j'ai fais un truc qui donne pas envie de corriger:p

-
Edité par CQEadsurf 6 septembre 2014 à 23:08:21

L’éternel débutant...
7 septembre 2014 à 0:07:52

Bonsoir, la bonne idée aurait été de prolongé la période pour rendre le dernier exercice car moi je ne les pas fini à temps et donc je ne peux corrigé personne et peut être que je suis pas le seul dans le cas
La vérité est ailleurs !!
7 septembre 2014 à 16:06:45

@CQEadsurf

Salut, j'ai finalement trouvé la solution à mon problème, c'était juste une balise de commentaire dans mon js qui était pas fermée, ça provoquait pas d'erreur mais ca m'a quand même bien agacé x)

Merci pour ton aide !

7 septembre 2014 à 20:03:55

@Maastok : "ah.....! syntaxe ! notre pire ennemi ! " :p content que ce soit arrangé.

@stephane7393 : oui ... enfin .... faut pas trop exagérer...

1) Je cite:

"Attention : Node.js n'est pas fait pour les débutants. Notez bien le niveau "Difficile" de ce tutoriel. ;)
Pour suivre ce tutoriel, il faut déjà avoir un bon niveau en JavaScript. Lisez ou relisez le tutoriel JavaScript de Thunderseb et Nesquik69.
Si vous vous dites "Je fais déjà du jQuery régulièrement donc je connais JavaScript", vous n'avez très probablement PAS le niveau attendu. Si par contre vous êtes à l'aise avec le concept d'objets JS, d'héritage par prototype, de closures... C'est bon signe ! Je m'efforcerai d'être le plus accessible à tous et de faire des rappels, mais ne sous-estimez pas l'importance d'une relecture du tutoriel JavaScript !"

le niveau "Difficile", oui mais pas au point de rendre un devoir dans 2 mois...

Pour être franc mon "expérience" sur JS........ ça faisait un peu plus d'un mois que je "pratique" avant de commencer ce cours.

Perso je me suis pris à 2 fois pour envoyer un exo ambitieux, dont la première fois en envoyant quelque chose qui fonctionnait à moitié...(il y avait juste la mise en mémoire et la restitution de la todolist pour un nouvel utilisateur, l'ajout et la suppression des taches qui fonctionnaient). N’empêche, sur les 2 fois j'ai quand-même corrigé mes exos.

2) Quand je vois la qualité du travail que j'ai corrigé je me suis dit "bon sang je me suis bien em...nuyé pour pas grand choses". Après tout, tout ceux que j'ai corrigé ont eu raison, leurs exo reprennent la première todolist en répondant au critères demandé, ils ont eu 10/10. Ils ont du le pondre en un après midi voir en 2 jours...

6 exercices 6x la meme chose

6 exercices 6x "la même chose"... visuellement parlant (s'il y avait 1 point pour l'originalité, je ne l'aurais pas distribué...)


Quant au temps de l’exécution de l'exercice : on a une semaine pour clore un chapitre et faire les exos. Sans parler que rien n’empêchait de prendre de l'avance sur la lecture du cours  si on avait fini un chapitre plus tôt que prévu...Même si on n'était pas membre premium!

Puis avec le forum, l'énoncé à déjà fuité plus ou moins... Encore faut il prendre le temps de lire le sujet depuis le début (surtout qu'il y a 3 pages...). Dire qu'on a pas le temps de lire alors que sur ce cours (le cours + le forum) il n'y a que la lecture qui n'est pas limité par le temps (même un non inscrit au cours peut le consulter, bien qu'il n’accède pas aux QCM)... c'est de la mauvaise foi !

______

PS: si un modérateur passe par la : si ça peut faire avancer le shmilblick et faire en sort que 3 aimables personnes puissent corriger mes exos au plus vite, je suis prêt à en corriger un par soir... mais bon je suis toujours persuadé que c'est le manque d’élèves arrivants à la 3eme semaine qui fait que la correction P2P fonctionne peu...

-
Edité par CQEadsurf 8 septembre 2014 à 17:55:30

L’éternel débutant...
8 septembre 2014 à 15:35:42

Salut,

J'ai un nouveau problème avec node.js mais comme d'habitude ca doit se jouer à pas grand chose ^^

Quand je met le code js du client directement dans une balise script dans le fichier html, tout fonctionne impec.

<script type="text/javascript">var socket = io.connect("http://localhost:8080");</script>

Par contre si je fais un .js externe et que je l'importe avec un src, plus rien ne va.

<script type="text/javascript" src="client.js"></script>

Pour des raisons de simplicité j'ai mis tous mes fichiers au même niveau.

C'est pas bloquant en soi mais je préfère externaliser tous les fichiers .js histoire de clarifier le code.

Merci d'avance !

8 septembre 2014 à 16:22:40

@Maastok : il est fort probable que ce soit une histoire de routage et donc un renseignement a mettre en plus coté serveur pour chaque fichier que ton navigateur veut consulter (JS et CSS compris). tu auras le même problème avec ton css si tu le sépare... (c'est une vraie page HTML appelé grace au module express? lis ceci, si tu utilise en plus EJS... heu...en théorie ca devrait marcher aussi et si en plus tu utilise FS au lieu de express... ("heu..." en 6 fois pire :p))

-
Edité par CQEadsurf 8 septembre 2014 à 16:37:52

L’éternel débutant...
8 septembre 2014 à 17:57:17

Merci pour la piste !

Je n'utilise pas express du coup niveau syntaxe je vois pas trop comment déclarer l'emplacement de mes fichiers.

Cours Node.js : c'est parti !

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown