2013-04-08 24 views
0

作业:
我知道网址几件事情的node.js处理express.js + node.js中的url?接受特定的词,双斜杠多

app.param('id', /^\d+$/); 
app.get('/user/:id', function(req, res){ 
    res.send('user ' + req.params.id); 
}); 

处理将只接受/用户/ 1 /用户/ 2 ...即。与id作为整数仅

app.get('/:type(discussion|page)/:id', ...) 

将只接受与讨论或页面

app.param('range', /^(\d+)\-(\d+)?$/); 
app.get('/range/range=:range', function(req, res){ 
var range = req.params.range; 
    res.send('from ' + range[1] + ' to ' + range[2]); 
}); 

将很容易地处理整数范围,并直接给我们不含任一裂缝或解析和验证一个数组值类型。

问:

  1. 通常服务器接受www.example.com/path和 www.example.com//path以同样的方式,但在node.js中我必须写两个 独立app.get检查来做到这一点。我怎么能只 一个检查做到这一点,以便/路径,//路径,///路径给出了同样的答复

  2. 我有一个网址,看起来对/:路径和路径可以取的值 中上市字典

    var dict={ 
        "a":"You called a", 
        "b": "b is second", 
        "c": "cats are all over internet" 
    } 
    app.get('/:charc',function(req,res){ 
        res.send(dict[charc]); 
    }); 
    

    我怎样才能限制应用程序只接受A,b,C没有把一个if else条件。 目前我做

    if (typeof dict[charc] == 'undefined') res.send(404, 'Sorry, we cannot find that!'); 
    
  3. 我可以调用的参数范围(从作业部分)同一开头后“?”像

    app.get('/range?range=:range',... 
    

    与URL www.example.com/range?range=123-234

+0

设置路径正则表达式以接受多个/'/ +路径' – Menztrual 2013-04-08 06:41:15

+0

关于#3,我敢肯定它不可能匹配查询字符串与表达'路由器。找不到确认这一点的来源。 – 2013-04-08 07:42:46

+1

关于#1,如果没有更好的解决方案,像'app.use(function(req,res,next){req.url = req.url.replace(/ [\ /] +/g,'/'); next ();});'将确保没有后续路线会看到任何重复的斜线。 – 2013-04-08 07:49:36

回答

3

关于#1,如果没有更好的解决办法像app.use(功能(REQ,水库,下一页){req.url = req.url.replace(/ [/] +/g,'/'); next();});将确保没有后续路线会看到任何重复的斜线。 - @ Andreas Hultgren

关于#3,我非常确定无法将查询字符串与express路由器进行匹配。找不到确认这一点的来源。 - @安德烈亚斯Hu​​ltgren

0

跟进到@拉夫对#1评论:与其在路径切换的网址,并继续处理请求的,它应该以使有问题的请求被转发到触发3XX重定向规范变体。 (这样在浏览器中更新正确的URL,或者提出请求的任何类型的客户端都知道原始双斜杠URL在技术上是无效的。)