【问题标题】:Cannot GET (Passed url as parameter)无法获取(将 url 作为参数传递)
【发布时间】:2016-10-01 02:36:40
【问题描述】:

express中的路由可以不带完整的URL作为参数吗?

例如,

router.get("/new/:url", <some function>);

当 :url 为 https://www.google.com 时给我无法 GET 错误

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    你不能像这种格式获得完整的URL。这种格式用于接受客户端发送的参数

     router.get("/new/:url", <some function>);
        //you can get url as params
        req.params.url//Use your URL
    

    【讨论】:

    • url是客户端发送的参数
    • 是的,它假定您可以使用该参数作为参数,但不能在当前路由中用作完整 URL
    【解决方案2】:

    我认为您对ExpressJS routing 不太了解,因为您的网址https://www.google.com//,它使用了路由分隔。

    在您的情况下,我们知道ExpressJS 支持正则表达式路由。我认为以下正则表达式对你有用

    app.get("/new/:protocol(http:|https:|ftp:)?/?/:url", <some function>);
    

    在上述情况下,您绑定了有限的协议 http、https 和 ftp。您可以使用 | 分隔符(或条件)添加更多协议,即使您不知道什么是协议,那么您喜欢关注

    app.get("/new/:protocol?/?/:url", <some function>);
    

    在以上两个路由中,? 表示路由工作文件的选项

    在您的函数中,您可以在 url 中附加协议,例如

    function newUrl(req, res) {
        if(req.params.protocol)
            req.params.url = req.params.protocol + '//' + req.params.url;
        console.log(req.params.url);
    }
    

    【讨论】:

      【解决方案3】:

      您应该在发送前对 url 参数进行编码。您的示例编码为 Http%3A%2F%2Fwww.google.com。在服务器端,您可以解码参数以获取之前的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-25
        • 1970-01-01
        • 1970-01-01
        • 2011-12-19
        • 2010-12-18
        相关资源
        最近更新 更多