【发布时间】:2016-10-01 02:36:40
【问题描述】:
express中的路由可以不带完整的URL作为参数吗?
例如,
router.get("/new/:url", <some function>);
当 :url 为 https://www.google.com 时给我无法 GET 错误
【问题讨论】:
express中的路由可以不带完整的URL作为参数吗?
例如,
router.get("/new/:url", <some function>);
当 :url 为 https://www.google.com 时给我无法 GET 错误
【问题讨论】:
你不能像这种格式获得完整的
URL。这种格式用于接受客户端发送的参数
router.get("/new/:url", <some function>);
//you can get url as params
req.params.url//Use your URL
【讨论】:
我认为您对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);
}
【讨论】:
您应该在发送前对 url 参数进行编码。您的示例编码为 Http%3A%2F%2Fwww.google.com。在服务器端,您可以解码参数以获取之前的值。
【讨论】: