zack5163v
Messages postés25Date d'inscriptionsamedi 28 juillet 2012StatutMembreDernière intervention24 septembre 2016
-
24 sept. 2016 à 02:37
zack5163v
Messages postés25Date d'inscriptionsamedi 28 juillet 2012StatutMembreDernière intervention24 septembre 2016
-
24 sept. 2016 à 03:03
Bonjour/Bonsoir, je suis actuellement en train de faire un projet fonctionnant avec nodeJS et socket.io, je viens de commencer en faisant un petit système d'inscription avec socket.io et mySQL. Toute les étapes de vérification de formulaire fonctionnent apparemment jusqu'au moment ou l'appel à mySQL pose un problème.
Du côté client il n'y a pas de problème, j'envoi un socket avec les données du formulaire (rEmail, rFirstname, rLastname, rPassword, rPasswordCf)
Du côté serveur le problème se pose lors de la vérification de l'email (savoir si l'email est déjà prise, alors j'entreprend d'utiliser la méthode query pour la vérification mais elle ne fonctionne pas et au bout de quelques secondes retourne une erreur: PROTOCOL_CONNECTION_LOST que j'ai essayer de déjouer en utilisant une fonction que j'ai prise sur un autre Forum: handleDisconnect() qui reconnecte MySQL à chaque connection perdue.
Voici mon code (server.js):
/************************************ /************************************ /* Coolife - 0.0.1 /* Real life - like simulation game /************************************ /***********************************/
var http = require('http'); var mysql = require('mysql');
/************************************ /************************************ /* Configuration de la base de donnée /************************************ /***********************************/
var db_config = { host: '< ip du vps >', port: 8080, user: 'root', password: '<mot de passe de la base de donnée>', database: '<nom de la base de donnée>' };
var connection;
// Fonction pour reconnecter mysql function handleDisconnect() {
console.log('handleDisconnect');
connection = mysql.createConnection(db_config); // Recreate the connection, since // the old one cannot be reused.
connection.connect(function(err) { // The server is either down if(err) { // or restarting (takes a while sometimes). console.log('error when connecting to db:', err.code); setTimeout(handleDisconnect, 2000); // We introduce a delay before attempting to reconnect, } // to avoid a hot loop, and to allow our node script to }); // process asynchronous requests in the meantime. // If you're also serving http, display a 503 error. connection.on('error', function(err) { console.log('db error', err.code); if(err.code === 'PROTOCOL_CONNECTION_LOST') { // Connection to the MySQL server is usually handleDisconnect(); // lost due to either server restart, or a } else { // connnection idle timeout (the wait_timeout throw err; // server variable configures this) } }); }
handleDisconnect();
httpServer = http.createServer(function(req, res) { console.log('Un utilisateur a affiché la page'); });
var illegalChars = /[\W_]/; var regex = /^[a-zA-Z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$/;
socket.emit('debugClient', data.rEmail);
if (data.rEmail == "" || data.rFirstname == "" || data.rLastname == "" || data.rPassword == "" || data.rPasswordCf == "") { registrationAlert('Veuillez remplir tous les champs'); } else {
// Je verifie si l'email à la bonne taille if (data.rEmail.length > 10) {
// Je verifie si l'email est correct if (regex.test(data.rEmail)) {
socket.emit('debugClient', 'Email correcte');
// Je verifie si l'email est déjà utilisée //////////////////// A PARTIR D'ICI LE CODE NE SEXECUTE PLUS mais quelques secondes plus tard, affiche une erreur (err) ////////////////////////////////////// connection.query('SELECT * FROM users WHERE email = ?', [data.rEmail], function(err, rows, fields){
if (rows.length === 1 && rows[0].email === data.rEmail) { registrationAlert('L\'email entrée est déjà utilisée');
} else { //Je verifie si le nom et prénom font la bonne taille if ((data.rFirstname.length > 2 && data.rLastname.length > 2) && (data.rFirstname.length < 10 && data.rLastname.length < 10)) {
// Je verifie si le nom et prénom sont correct if (!illegalChars.test(data.rFirstname) && !illegalChars.test(data.rLastname)) {
socket.emit('test');
} else { registrationAlert('Votre nom ou prénom ne contient pas de bons caractères'); }
} else { registrationAlert('Votre nom ou prénom ne fait pas la bonne taille'); } }
connection.end();
});
} else { registrationAlert('Votre email est invalide'); }
} else { registrationAlert('Votre email est trop court'); }
}
});
function registrationAlert(msg) { socket.emit('registrationAlert', msg); }
});
Le socket debugClient, me permet de faire un console.log qui apparaitra dans la console du navigateur
Le socket test, affiche une alerte "alert();" dans le client (Pour vérification)
la fonction registrationAlert() me permet d'afficher une alerte sur le site en rapport au formulaire d'inscription.
PS: Je suis un peu débutant en nodeJS mais je suis a l'aise avec les notions de javascript/jquery jusqu'à un certain niveau.
Je tiens a préciser que ce code et cette structure est la même en localhost mais dans une version différente et que contrairement à ici, en local cela fonctionne.
Je n'utilise pas Express.
Merci d'avance :)
A voir également:
Problème NodeJS/MySQL/Socket.io - Query ne fonctionne pas