作业:
我对node.js中的url处理知之甚少
app.param('id', /^\d+$/);
app.get('/user/:id', function(req, res){
res.send('user ' + req.params.id);
});
只接受/ user / 1,/ user / 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]);
});
将轻松处理整数范围并直接为我们提供一个数组,而无需任何拆分或解析和验证。
问题:
通常服务器接受www.example.com/path和 www.example.com//path以相同的方式但在node.js我必须写两个 单独的app.get检查来做到这一点。我怎样才能实现这一目标 一检查,以便/ path,// path,// / path给出相同的响应
我有一个查找/的路径:路径和路径可以取值 列在字典中
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]);
});
如何在不添加if else条件的情况下限制app仅接受a,b,c。 目前我正在做
if (typeof dict[charc] == 'undefined') res.send(404, 'Sorry, we cannot find that!');
我可以在'?'之后调用范围参数(来自作业部分)喜欢
app.get('/range?range=:range',...
使用网址www.example.com/range?range=123-234
答案 0 :(得分:3)
关于#1,如果没有更好的解决方案,比如app.use(function(req,res,next){req.url = req.url.replace(/ [/] + / g,'/'); next ();});将确保没有后续路线会看到任何重复的斜杠。 - @ Andreas Hultgren
关于#3,我很确定不可能将查询字符串与快速路由器匹配。找不到确认这一点的来源。 - @ Andreas Hultgren
答案 1 :(得分:0)
跟随@Gaurav对#1的评论:不是改变路线中的网址并继续处理请求,而是应该触发3xx重定向,以便将违规请求转发给规范变体。 (这样在浏览器中更新了正确的URL。或者无论何种类型的客户端使得请求都知道原始的双斜杠URL在技术上是无效的。)