作业:
我对 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 //路径以同样的方式但是在node.js中我必须写两个 单独的 app.get 检查来做到这一点。我怎样才能做到这一点 一项检查,以便 /path, //path, ///path 给出相同的响应
我有一个查找 /:path 的 url,并且 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]);
});
如何限制应用程序仅接受 a、b、c,而不添加 if else 条件。 目前我正在做
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
关于#1,如果没有更好的解决方案,比如
app.use(function (req,res,next) {
req.url = req.url.replace(/[\/]+/g, '/');
next(); }
);
将确保后续路由不会看到任何重复的斜杠。 -@Andreas Hultgren
关于#3,我很确定不可能将查询字符串与express'路由器匹配。但找不到证实这一点的消息来源。 -@Andreas Hultgren
跟进 @Gaurav 对#1 的评论:与其更改路由中的 url 并继续处理请求,不如“应该”触发 3xx 重定向,以便将有问题的请求转发到规范变体。 (这样,正确的 URL 就会在浏览器中更新。或者发出请求的任何类型的客户端都会意识到原始的双斜杠 URL 在技术上是无效的。)