使用Express路由处理请求参数中的斜杠字符

Ben*_*ton 5 node.js express

我目前正在使用Express开发一个URL缩短应用程序.我希望用户能够输入这样的URL:

https://www.exampleurlshortener.com/new/https://www.google.com
Run Code Online (Sandbox Code Playgroud)

问题是每当我尝试使用Express指定参数时,它只会提取'https:'部分,之后的所有内容都会丢失,因为2个反斜杠正在注册为新路径:

app.get('/new/:url', (req, res) => {
  console.log(req.params.url) // outputs 'https:'
Run Code Online (Sandbox Code Playgroud)

我想将每个部分指定为一个新参数,但如果inner是空白,则最终会抛出404.我需要使用此方法检查内部是否为空,否则用户将能够键入https:/something/www.google.com

app.get('/new/:prot/:inner/:address', (req, res) => {
  // throws 404 on valid addresses
Run Code Online (Sandbox Code Playgroud)

有一种简单的方法可以解决这个问题吗?是否可以在请求中的某处检查完整URL?或者参数可以忽略反斜杠?

hjp*_*r92 6

您可以将表达式用于URL占位符:

app.get('/new/:url(.*)', (req, res) => {
  console.log(req.params.url) // will output 'https://www.google.com'
Run Code Online (Sandbox Code Playgroud)

  • 请注意,当我尝试使用参数(。*)的代码时,我再次遇到404错误,但是在我的情况下使用(*)可以工作。 (6认同)