express中的路由可以不将完整的URL作为参数吗?
例如,
router.get("/new/:url", <some function>);
当:url为https://www.google.com 时,给出了Can not GET错误
答案 0 :(得分:1)
你不能像这种格式那样得到完整的
URL
。这种格式用于获取客户发送的参数
router.get("/new/:url", <some function>);
//you can get url as params
req.params.url//Use your URL
答案 1 :(得分:0)
我认为您对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);
}
答案 2 :(得分:0)
您应该在发送前对url参数进行编码。您的示例编码为Http%3A%2F%2Fwww.google.com。在服务器端,您可以解码参数以从之前获取值。