Petite mise à jour avec un routing plus élégant, automatisé et séparé du reste ^^
Currying en Javascript
La version fonctionelle
Celle de John Resig
Contenu de routes.js
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 iffle. Je connaissais pas, ça fait propre je trouve.
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 iffle. 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);