gpt4 book ai didi

node.js - 在express.js+node.js中处理url?接受特定单词、双斜杠等

转载 作者:太空宇宙 更新时间:2023-11-03 22:55:36 25 4
gpt4 key购买 nike

家庭作业:
我对 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', ...)  

只接受具有讨论或页面值(value)的类型

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//路径以同样的方式但是在node.js中我必须写两个单独的 app.get 检查来做到这一点。我怎样才能做到这一点一次检查,以便/path,//path,///path 给出相同的响应

  2. 我有一个 url 来查找/: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]);
    });

    如何限制应用程序仅接受 a、b、c,而不添加 if else 条件。目前我正在做

    if (typeof dict[charc] == 'undefined') res.send(404, 'Sorry, we cannot find that!');
  3. 我可以在“?”之后以同样的方式调用范围参数(来自作业部分)吗?就像

    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

关于node.js - 在express.js+node.js中处理url?接受特定单词、双斜杠等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15872694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com