From Ape Wiki
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.


