首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否在express中的root之后传递带可选参数的路由控制?

是否在express中的root之后传递带可选参数的路由控制?
EN

Stack Overflow用户
提问于 2011-07-22 09:25:05
回答 1查看 118.3K关注 0票数 97

我正在做一个简单的网址缩短应用程序,并有以下快速路线:

代码语言:javascript
复制
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/参数成为可选的。这是正确的方法吗:

代码语言:javascript
复制
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 /路由,我想它会工作得很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-22 10:03:54

这将取决于client.get在未定义地作为其第一个参数传递时所做的工作。

像这样的东西会更安全:

代码语言:javascript
复制
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,就会调用它。

票数 215
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6784753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档