JeuWeb - Crée ton jeu par navigateur
La base d'un framework MVC avec Javascript, Node.js, Express, Jade et MySQL - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : La base d'un framework MVC avec Javascript, Node.js, Express, Jade et MySQL (/showthread.php?tid=6137)

Pages : 1 2


La base d'un framework MVC avec Javascript, Node.js, Express, Jade et MySQL - Maks - 19-05-2012

Installation de node.js et npm

Installers Mac & Windows : http://nodejs.org/#download

Pour linux (installe npm en même temps), si je dis pas de connerie :


sudo apt-get update
sudo apt-get install nodejs npm

Ensuite on va avoir besoin des modules Express et MySQL et du moteur de template Jade

Code :
npm install mysql
npm install express
npm install jade

L'arborescence :

/controllers
/index.js
/models
/index.js
/views
/index.jade
/node_modules
/express
/jade
/mysql
app.js

-------------------------

Contenu de app.js



var express = require('express');
var mysql = require('mysql');

var client = mysql.createClient({

user : 'root',
password : ''

});

client.query('USE bdd');

var app = express.createServer().listen(8080);

app.configure(function() {

app.set('view engine', 'jade');
app.set('views', __dirname + '/views');
app.set('view options', { layout : false });

});

app.get('/index/:menu', function (req, res) {

require('./controllers/index').on(req, res, client, req.params.menu);

});


Contenu de controllers/index.js



var model = require('../models/index.js');

exports.on = function (req, res, client, menu) {

var bind = {

'menu' : menu

};

model.getList(client, function (data) {

bind.list = data;

res.render('index', bind);

});
};


Contenu de models/index.js



exports.getList = function (client, cb) {

client.query('SELECT pseudo FROM joueurs',
function selectCb (err, results, fields) {

if (err) {

throw err;

}

cb(results);

}
);
};


Contenu de views/index.jade



doctype 5
html
body
\Le menu est : #{menu}
br
- var i = 0;
each item in list
\ L'item n°#{i} est #{item.pseudo}
br
- ++i;


Puis rendez-vous sur http://127.0.0.1:8080/index/foo (bon dans mon exemple j'ai repris rapido une table de mon jeu, base de donnée 'bdd', table 'joueurs', champ 'pseudo' mais c'est adaptable).

Bien sûr on pourra choisir EJS ou HAML plutôt que Jade. Redis/MongoDB plutôt que MySQL. Mais surtout ça serait intéressant de proposer une implémentation avec Backbone.js quand j'aurai enfin trouvé le temps de m'y attaquer Smile


RE: La base d'un framework MVC avec Javascript, Node.js, Express, Jade et MySQL - Angelblade - 19-05-2012

MERCI beaucoup!! Je cherchais justement quelque chose de clair et concis comme ça. Je testerai un de ces quatre, encore merci


RE: La base d'un framework MVC avec Javascript, Node.js, Express, Jade et MySQL - Maks - 19-05-2012

De rien, j'ai fait au plus simple, si tu as des questions n'hésite pas Wink
Petites précisions pour l'installation pour Ter Rowan :

Après avoir installé nodejs, dans les variables d'environnement du système, sous Windows, pour pouvoir utiliser la commande 'node' partout, il faut rajouter :

;C:\Program Files (x86)\nodejs

Ensuite pour npm, il faut se placer dans le répertoire de l'application pour installer les modules

cd C:\Program Files (x86)\Maxence\Documents\App\
npm install express

Ce qui créera automatiquement le dossier /node_modules/


RE: La base d'un framework MVC avec Javascript, Node.js, Express, Jade et MySQL - Ter Rowan - 19-05-2012

(19-05-2012, 01:05 PM)Maks a écrit : De rien, j'ai fait au plus simple, si tu as des questions n'hésite pas Wink
Petites précisions pour l'installation pour Ter Rowan :

Après avoir installé nodejs, dans les variables d'environnement du système, sous Windows, pour pouvoir utiliser la commande 'node' partout, il faut rajouter :

;C:\Program Files (x86)\nodejs

Ensuite pour npm, il faut se placer dans le répertoire de l'application pour installer les modules

cd C:\Program Files (x86)\Maxence\Documents\App\
npm install express

Ce qui créera automatiquement le dossier /node_modules/

Ben voila, tu vois tu peux quand tu veux :p


RE: La base d'un framework MVC avec Javascript, Node.js, Express, Jade et MySQL - Dexyne - 19-05-2012

Pour Node je l'ai installé de façon "manuelle" donc en lançant les commandes pour compiler (cf. Github) et npm s'installe automatiquement (d'ailleurs j'ai cru lire sur le site qu'il se faisait mais je ne suis pas sur via la commande "apt-get install").


RE: La base d'un framework MVC avec Javascript, Node.js, Express, Jade et MySQL - Argorate - 20-05-2012

Et pourquoi personne ne fait un exe qui lance ces cmd tout seul et dans le bon ordre et qui simplifierais tout pour tout le monde? ^^


RE: La base d'un framework MVC avec Javascript, Node.js, Express, Jade et MySQL - Plume - 20-05-2012

Pour NodeJS, il y a les exécutables.

Pour le reste, ce sont des librairies parmi tant d'autres. Celles présentées par Maks ne sont pas indispensables donc on ne va pas les intégrer dans la procédure d'installation de NodeJS. Tu installes ce dont tu as besoin dans l'ordre que tu veux. Il n'y a pas d'ordre requis pour l'installation des paquets.


RE: La base d'un framework MVC avec Javascript, Node.js, Express, Jade et MySQL - Sephi-Chan - 20-05-2012

(20-05-2012, 11:09 AM)Argorate a écrit : Et pourquoi personne ne fait un exe qui lance ces cmd tout seul et dans le bon ordre et qui simplifierais tout pour tout le monde? ^^

Parce que ça n'a pas d'intérêt.

Si on te simplifie le point d'entrée sur Windows, tu devras de toute façon apprendre à utiliser Linux pour la mise en production. Mettre en place Node sur du Windows, c'est une voie sans issue, inutile de dépenser du temps et de l'énergie pour ça.

Quand on veut utiliser des outils, il faut apprendre ce qu'ils impliquent. Et à ce titre tous les développeurs pro et semi-pro devraient avoir des bases en administration Linux.


RE: La base d'un framework MVC avec Javascript, Node.js, Express, Jade et MySQL - Maks - 04-06-2012

Petite mise à jour avec un routing plus élégant, automatisé et séparé du reste ^^

Currying en Javascript


Function.prototype.curry = function() {
if (arguments.length<1) {
return this; //nothing to curry with - return function
}
var __method = this;
var args = toArray(arguments);
return function() {
return __method.apply(this, args.concat(toArray(arguments)));
}
}

La version fonctionelle



function curry (fn, scope) {

var scope = scope || window;

var args = [];

for (var i=2, len = arguments.length; i < len; ++i) {

args.push(arguments[i]);

};

return function() {

fn.apply(scope, args);

};

}

Celle de John Resig



Function.prototype.curry = function() {
var fn = this, args = Array.prototype.slice.call(arguments);
return function() {
return fn.apply(this, args.concat(
Array.prototype.slice.call(arguments)));
};
};


Contenu de routes.js


app.get(':controller/:action?', require('./controllers/' + req.params.controller).on.curry(req, res));

// ici d'autres routes qui ne rentrent pas dans le format /controller/action ou requêtes POST
// pour les requêtes POST, les paramètres sont récupérés de cette façon : param = req.params('param');
// ? indique un paramètre non obligatoire

Bon à voir si on peut curry sur require sans que ça sorte une erreur, je teste en local ce soir.
Ca vient de la programmation fonctionnelle d'après ce que j'en ai lu (bon ok ici c'est utilisé comme une méthode ConfusediffleSmile. Je connaissais pas, ça fait propre je trouve.



// bouh
setTimeout('sendRequest(' + actionName + ',' + validate + ')', 1000);

// bien
setTimeout(function() {sendRequest(actionName, validate)}, 1000);

// best ?
setTimeout(sendRequest.curry(actionName,validate), 1000);



RE: La base d'un framework MVC avec Javascript, Node.js, Express, Jade et MySQL - Plume - 05-06-2012

J'ai failli ne pas répondre. 3 fois que Chrome plante sur l'exécution de tests de performances …

Je voulais savoir pourquoi tu utilises setTimeout() ? Eval is Evil: Set Timeout

Sinon, tu peux jouer avec JSPerf pour faire des tests de performances JavaScript.

Un jour, je développerai un projet avec NodeJS ^^