Je travaille sur une application de raccourcissement d'URL simple et ai les itinéraires express suivants:
app.get('/', function(req, res){
res.render('index', {
link: null
});
});
app.post('/', function(req, res){
function makeRandom(){
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for( var i=0; i < 3 /*y u looking at me <33??*/; i++ )
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
var url = req.body.user.url;
var key = makeRandom();
client.set(key, url);
var link = 'http://50.22.248.74/l/' + key;
res.render('index', {
link: link
});
console.log(url);
console.log(key);
});
app.get('/l/:key', function(req, res){
client.get(req.params.key, function(err, reply){
if(client.get(reply)){
res.redirect(reply);
}
else{
res.render('index', {
link: null
});
}
});
});
Je voudrais enlever le /l/
de ma route (pour raccourcir mon URL) et rendre le paramètre: key facultatif. Serait-ce la bonne façon de faire ceci:
app.get('/:key?', function(req, res, next){
client.get(req.params.key, function(err, reply){
if(client.get(reply)){
res.redirect(reply);
}
else{
next();
}
});
});
app.get('/', function(req, res){
res.render('index, {
link: null
});
});
Pas sûr de devoir préciser que mon /
_ route est celle à suivre. Mais puisque mon seul autre itinéraire serait mon message mis à jour /
_ route, j'imagine que cela fonctionnerait bien.
Cela fonctionnerait en fonction de ce que fait client.get lorsqu'il est transmis en tant que premier paramètre indéfini.
Quelque chose comme ça serait plus sûr:
app.get('/:key?', function(req, res, next) {
var key = req.params.key;
if (!key) {
next();
return;
}
client.get(key, function(err, reply) {
if(client.get(reply)) {
res.redirect(reply);
}
else {
res.render('index', {
link: null
});
}
});
});
Il n'y a pas de problème à appeler next () dans le rappel.
Selon this , les gestionnaires sont appelés dans l'ordre dans lequel ils ont été ajoutés. Ainsi, tant que votre prochaine route est app.get ('/', ...), elle sera appelée s'il n'y a pas clé.