节点服务器(web-socket)崩溃

时间:2015-04-23 07:32:18

标签: javascript node.js server

我正在尝试制作node.js服务器 当用户断开自己或刷新页面时,可能会出现以下错误:

enter image description here
这是我服务器的代码:



var http    = require("http");
var ws      = require("C:/Program Files/nodejs/node_modules/npm/node_modules/nodejs-websocket/");
var colors  = require('C:/Program Files/nodejs/node_modules/npm/node_modules/colors');
var fs      = require("fs");
var request = "C:/Program Files/nodejs/node_modules/npm/node_modules/request";

http.createServer(function (req, res) {
	fs.createReadStream("index.php").pipe(res)
}).listen(8080)

// ###################################################################################################################################
// ######################################################## CLASSE UTILISATEUR #######################################################
// ###################################################################################################################################
var utilisateur = function(){
}
// ###################################################################################################################################
// ########################################################## CLASSE SERVER ##########################################################
// ###################################################################################################################################
var tableauUtilisateur = new Array();

var server = ws.createServer(function (connection){
	connection.trigramme = null
	connection.on("text", function (str){
		if (connection.trigramme === null){
			newUtilisateur = new utilisateur();
			connection.utilisateur = newUtilisateur;
			connection.trigramme = str;
			tableauUtilisateur.push(newUtilisateur);
		}
		else{
			var code = str.substring(4,6);
			var reste = str.substring(6,str.length);
			switch(code){
				case "01": // L'UTILISATEUR DEMANDE A SE CONNECTER
					var postData={data:reste};
					require(request).post({
						uri:"http://localhost/php/seConnecter.php",
						headers:{'content-type': 'application/x-www-form-urlencoded'},
						body:require('querystring').stringify(postData)
						},function(err,res,body){
							if(body != "non"){
								var infos = body.split("-1-2-3-4-5-6-7-8-9-");
								connection.utilisateur.id        = infos[1];
								connection.utilisateur.trigramme = infos[2];
								connection.utilisateur.nom       = infos[3];
								connection.utilisateur.prenom    = infos[4];
								connection.utilisateur.admin     = infos[6];
								connection.trigramme             = infos[2];
								console.log(("> "+infos[2]+" S\'EST CONNECTE AU SERVEUR AVEC SES IDENTIFIANTS.").grey);
								connection.sendText("type01"+infos[0]+",,,,,"+infos[2]+",,,,,"+infos[3]+",,,,,"+infos[4]+",,,,,"+infos[5]+",,,,,"+infos[6]);
								broadcastExcept("type07"+infos[2]+"("+infos[3]+" "+infos[4]+")",connection.utilisateur.id);
							}
							else
								connection.sendText("type01non");
						});
					break;
				case "02": // L'UTILISATEUR DEMANDE A CHANGER D'ANIMATION
					reste += ",,,,,"+connection.utilisateur.id;
					var postData={data:reste};
					require(request).post({
						uri:"http://localhost/php/modifierAnimation.php",
						headers:{'content-type': 'application/x-www-form-urlencoded'},
						body:require('querystring').stringify(postData)
						},function(err,res,body){});
					break;
				case "03": // L'UTILISATEUR DEMANDE A SUPPRIMER UN COMPTE
					if(connection.utilisateur.admin == 1){
						var postData={data:reste};
						require(request).post({
							uri:"http://localhost/php/supprimerCompte.php",
							headers:{'content-type': 'application/x-www-form-urlencoded'},
							body:require('querystring').stringify(postData)
							},function(err,res,body){
								connection.sendText("type03"+body);
								if(body == "oui")
									console.log(("> "+connection.trigramme+" A SUPPRIME UN COMPTE DONT L'ID EST : "+reste).grey);
						});
					}
					else
						connection.sendText("type03non");
					break;
				case "04": // L'UTILISATEUR DEMANDE A CREER UN COMPTE
					if(connection.utilisateur.admin == 1){
						var postData={data:reste};
						require(request).post({
							uri:"http://localhost/php/creerCompte.php",
							headers:{'content-type': 'application/x-www-form-urlencoded'},
							body:require('querystring').stringify(postData)
							},function(err,res,body){
								connection.sendText("type04"+body);
								if(body == "oui"){
									console.log(("> "+connection.trigramme+" A CREE UN COMPTE DONT LE TRIGRAMME EST : "+reste.split(",,,,,")[0]).grey);
									connection.sendText("type04"+body);
								}
						});
					}
					else
						connection.sendText("type04non");
					break;
				case "05": // L'UTILISATEUR DEMANDE A CHANGER LE TYPE D'UN COMPTE
					if(connection.utilisateur.admin == 1){
						var postData={data:reste};
						require(request).post({
							uri:"http://localhost/php/changerTypeCompte.php",
							headers:{'content-type': 'application/x-www-form-urlencoded'},
							body:require('querystring').stringify(postData)
							},function(err,res,body){
								connection.sendText("type05"+body);
								var valeur = reste.split(",,,,,")[1];
								for(var cpt=0;cpt<tableauUtilisateur.length;cpt++){
									if(tableauUtilisateur.id == reste.split(",,,,,")[0]){
										tableauUtilisateur.admin = valeur;
									}
									if(valeur == 1)
										console.log(("> "+connection.trigramme+" A DONNE LES DROITS ADMINISTRTEURS A "+reste.split(",,,,,")[2]).grey);
									else
										console.log(("> "+connection.trigramme+" A RETIRE LES DROITS ADMINISTRTEURS A "+reste.split(",,,,,")[2]).grey);
								}
							});
					}
					else
						connection.sendText("type03non");
					break;
				case "06": // L'UTILISATEUR DEMANDE A SE CONNECTER AVEC SES COOKIES
					var postData={data:reste};
					require(request).post({
						uri:"http://localhost/php/seConnecterCookies.php",
						headers:{'content-type': 'application/x-www-form-urlencoded'},
						body:require('querystring').stringify(postData)
						},function(err,res,body){
							if(body != "non"){
								var infos = body.split("-1-2-3-4-5-6-7-8-9-");
								connection.utilisateur.id        = infos[1];
								connection.utilisateur.trigramme = infos[2];
								connection.utilisateur.nom       = infos[3];
								connection.utilisateur.prenom    = infos[4];
								connection.utilisateur.admin     = infos[6];
								connection.trigramme             = infos[2];
								console.log(("> "+infos[2]+" S\'EST CONNECTE AU SERVEUR AVEC SON ").grey+("COOKIE.").yellow);
								connection.sendText("type01"+infos[0]+",,,,,"+infos[2]+",,,,,"+infos[3]+",,,,,"+infos[4]+",,,,,"+infos[5]+",,,,,"+infos[6]);
								broadcastExcept("type07"+infos[2]+"("+infos[3]+" "+infos[4]+")",connection.utilisateur.id);
							}
							else
								connection.sendText("type01non");
						});
					break;
				case "08": // L'UTILISATEUR DEMANDE A MODIFIER SON MOT DE PASSE
					reste += ",,,,,"+connection.utilisateur.id;
					var postData={data:reste};
					require(request).post({
						uri:"http://localhost/php/modifierMotDePasse.php",
						headers:{'content-type': 'application/x-www-form-urlencoded'},
						body:require('querystring').stringify(postData)
						},function(err,res,body){
							if(body != "non"){
								connection.sendText("type08"+body);
							}
							else
								connection.sendText("type08non");
						});
					break;
			}
		}
	})
	connection.on("close", function (){
		for(var cpt=0;cpt<tableauUtilisateur.length;cpt++){
			if(tableauUtilisateur[cpt].trigramme == connection.trigramme){
				console.log(("> "+connection.trigramme+" A QUITTE LE SERVEUR.").grey);
				tableauUtilisateur.splice(cpt, 1);
			}
		}
	})
})
server.listen(8081)
function broadcast(str){
	server.connections.forEach(function (connection){
		connection.sendText(str)
	})
}
function broadcastExcept(str,except){
	server.connections.forEach(function (connection){
		if(connection.utilisateur.id != except)
			connection.sendText(str)
	})
}
&#13;
&#13;
&#13;

此处的开关用于区分消息的类型(连接,通话等) 我看了this link,但我不明白,或者可能不是同一个错误:/

PS:我不认为这个错误在connection.on("close", function (){,因为我试图删除它并且它是相同的。

0 个答案:

没有答案