【问题标题】:Dealing with slash characters in request parameter using Express route使用 Express 路由处理请求参数中的斜线字符
【发布时间】:2017-02-20 18:21:53
【问题描述】:

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

https://www.exampleurlshortener.com/new/https://www.google.com

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

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

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

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

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

【问题讨论】:

  • 尝试使用req.url,或者通过查询字符串传递参数(我会推荐第二种方法,它对你的API的客户来说也更简单)

标签: node.js express


【解决方案1】:

您可以使用an expression 作为您的 URL 占位符:

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

【讨论】:

  • 这正是我想要的。我查看了该文档,但看不到您提供的示例。谢谢。
  • 请注意,当我使用参数 (.*) 尝试您的代码时,我再次遇到 404 错误,但在我的情况下使用 (*) 代替了。
  • “连字符 (-) 和点 (.) 由基于字符串的路径逐字解释。”。所以(*) 可能是你打算做的。
  • 我遇到了类似的问题,这个帖子刚刚解决了它。谢谢。
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 2023-03-05
  • 2015-08-14
  • 1970-01-01
  • 2020-08-21
  • 2021-02-11
  • 2015-12-01
  • 2018-09-10
相关资源
最近更新 更多