将URL作为参数传递给Node/Express应用程序

3

我有一个简单的Node/Express路由,如下所示:

var app = express();

app.get('gettags/:page', function(request,response)
{
    var thePage = request.params.page;
    ...
    ...
}

我遇到的问题是,如果我将一个URL作为参数传递进去,就会出现“Cannot GET”错误。所以,如果我像这样调用:
http://www.mynodeapp.com/gettags/http://www.someurl.com/?withquery=something

我遇到了“无法获取”错误。由于已经有几年没有使用Node了,所以我可能忘记了一些非常基础的东西。但是我无法解决这个问题,并且在搜索引擎上搜索此问题也没有找到任何有用的信息。

谢谢您的帮助!

2个回答

3

啊,是这样啊。谢谢你的提醒。然而,对参数进行编码仍然会导致“无法获取”错误。如果我传递的不是一个URL,就不会抛出错误。只有一个URL会出错 - 但这正是我需要传递的。我对此感到困惑。感谢你的时间! - Lew
您需要在HTTP请求中对URI进行编码,而不是在node.js的一侧进行编码。 - Andrew Lavers
请注意,Express的“/foo/:bar”参数机制通过“/”字符拆分URI路径。如果您尝试访问“http://www.mynodeapp.com/gettags/foo/bar”,您将会遇到相同的“无法获取”错误。 - Andrew Lavers
同时,您不必使用express参数语法,您可以这样做app.get('/gettags/*', ...),直接使用未编码的URI,并自己解析req.originalUrl,但是如果您需要在请求中添加任何其他路径或查询参数,则会更加棘手。简单地对请求参数进行URI编码是一个更简单的选择。 - Andrew Lavers
Andrew,是的 - 我在请求端对其进行了编码,而不是在节点端。但是你的“req.originalURL”实际上是一个更好的解决方案,因为我所需要做的就是提取传递的URL并将其发送到另一个节点模块进行处理。所以这很有效。再次感谢您的时间 - 非常感谢! - Lew

0
你代码中的问题是:

/ 's of http://www.someurl.com

因此,为了解决这个问题,请在节点中使用 URL 编码函数。
encodeURIComponent("Your url goes here")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接