node.js - nodejs - ¿Pasar control de ruta con parámetro opcional después de root en express?
middlewares nodejs (1)
Eso funcionaría dependiendo de lo que haga client.get cuando pase indefinido como su primer parámetro.
Algo como esto sería más seguro:
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
});
}
});
});
No hay problema en llamar a next () dentro de la devolución de llamada.
De acuerdo con this , los manejadores se invocan en el orden en que se agregan, por lo que siempre que su siguiente ruta sea app.get (''/'', ...) se llamará si no hay una clave.
Estoy trabajando en una aplicación de reducción de URL simple y tengo las siguientes rutas expresas:
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
});
}
});
});
Me gustaría eliminar /l/
de mi ruta (para hacer que mi url sea más corta) y hacer que el parámetro: key sea opcional. ¿Esta sería la forma correcta de hacer esto?
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
});
});
No estoy seguro de si necesito especificar que mi /
ruta es la que se "conecta" a. Pero dado que mi única otra ruta sería mi publicación /
ruta actualizada, me imagino que funcionaría bien.