我正在做一个简单的网址缩短应用程序,并有以下快速路线:
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
});
}
});
});
我想从我的路由中删除关键字(以使我的url更短),并使:/l/
参数成为可选的。这是正确的方法吗:
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
});
});
不确定是否需要指定我的/
路由是要“连接”到的路由。但由于我唯一的其他路由将是我更新的post /
路由,我想它会工作得很好。
发布于 2011-07-22 10:03:54
这将取决于client.get在未定义地作为其第一个参数传递时所做的工作。
像这样的东西会更安全:
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
});
}
});
});
在回调中调用next()没有问题。
根据this的说法,处理程序是按照它们被添加的顺序来调用的,所以只要您的下一个路由是app.get('/',...)如果没有key,就会调用它。
https://stackoverflow.com/questions/6784753
复制相似问题