From Ape Wiki

Jump to: navigation, search


Contents

[edit] Module javascript côté serveur utilisant MySQL

Cet extrait de code vous montrera  :

  • Comment connecter votre module APE à un serveur MySQL
  • Déclarer une commande pour autoriser l'utlisateur à recevoir des données depuis MySQL

[edit] Code côté serveur

Fichier MySQLDemo.js :

    function MySQLConnect(ip, user, password, database) {
        var sql = new Ape.MySQL(ip + ":3306", user, password, database);
 
        //onConnect callback
        sql.onConect = function() {
            Ape.log('You are now connected to MySQL server');
        }
 
        //onError callback
        sql.onError = function(errorNo) {
            Ape.log('Connection error ' + errorNo +' '+ this.errorString());
        }   
 
        return sql;
    }
 
    //connexion à MySQL Server
    var sql = MySQLConnect('127.0.0.1', 'toor', 'root', 'ape');
 
 
    //Minuteur pour envoyer des requêtes maintenant le connexion toutes les deux minutes
    (function() {
        sql.query('SELECT 1', function(res, errorNo) {
            if (errorNo == 8) {//Quelque chose ne s'est pas bien passé, la connexion a été fermée
                sql =  MySQLConnect('127.0.0.1', 'root', 'toor', 'ape'); //Reconnexion au serveur MySQL
            }
        }.bind(this));
    }).periodical(1000*60*2);
 
    //Déclarer la commande getInfo
    Ape.registerCmd('getInfo', true, function(params, cmd) {
        //Récupère les données depuis la table mysql
        sql.query('SELECT age, city FROM users WHERE user = "' + Ape.MySQL.escape(params.user) + '" LIMIT 1', function(res, errorNo) {
             if (errorNo) {
                Ape.log('Request error : ' + errorNo + ' : '+ this.errorString());
                return ['101', 'MYSQL_ERROR'];
            } else {
                //Affiche les données log reçues de mysql
                Ape.log('Réception de '+res.length + ' résultat(s)');
 
                Ape.log('- Age : ' + res[0].age + '\n- City : ' + res[0].city);
 
                cmd.sendResponse('info', res[0]);//Envoie le premier résultat au client
             }
        });
    })

Copiez ce code dans un fichier appelé MySQLDemo.js et placez le dans répertoire scripts d'APE. Éditez alors le fichier main.ape.js et ajoutez:

include('MySQLDemo.js');

[edit] Code côté Client

        var client = new APE.Client();
 
        //Chargement du client APE
        client.load();
 
        client.addEvent('load', function() {
            client.core.start({'name': '' + Date.now() + ''});//Démarrage avec un nom aléatoire
        });
 
        client.addEvent('ready', function() {
            //Envoi de la commande getInfo
            client.core.request.send('getInfo', {'user': 'efyx'});
 
            //Info de retour onRaw
            client.onRaw('info', function(params) {
                console.log(params);
            });
        });

[edit] Structure et contenu de la table MySQL

--
-- Structure de Table pour la table `users`
--
 
CREATE TABLE IF NOT EXISTS `users` (
  `user` varchar(32) NOT NULL,
  `age` int(11) NOT NULL,
  `city` varchar(100) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
--
-- Ajout de données à la table `users`
--
 
INSERT INTO `users` (`user`, `age`, `city`) VALUES
('efyx', 24, 'Montpellier'),
('korri', 20, 'Montpellier');

[edit] Problèmes récurrents

  • Si vous obtenez Ape.MySQL is not a constructor à l'exécution du script côté serveur, cela signifie que vous avez compilé le serveur APE sans le support mysql. Tentez d'installer le fichier d'entête MySQL et lancez build.sh une nouvelle fois (sur debian apt-get install libmysqlclient-dev)
  • Ape.MySQL requiert un utilisateur et un mot de passe, il n'est pas possible d'utiliser un utilisateur sans mot de passe
  • Opérer un select sur un champ vide dans MySQL peut occasionner un bug, évitez-le.