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

yrwegjxp  于 2023-05-28  发布在  Node.js
关注(0)|答案(2)|浏览(204)

我目前正在使用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。我需要使用此方法检查inner是否为空,否则用户将能够键入https:/something/www.google.com

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

有没有一个简单的方法来解决这个问题,我错过了?完整的URL是否可以在请求中的某个位置进行检查?参数是否可以忽略反斜杠?

4xrmg8kj

4xrmg8kj1#

您可以使用表达式来表示URL占位符:

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

41ik7eoe2#

解决方案

如果任何参数包含“/”,则在参数名称后添加“(*)”。

示例

路由:“/change/job-entry/:order_number”
参数“order_number”表示类似“Anik-13/3/2023-Paharika-Srilanka”的值

变更

路由:“/change/job-entry/:order_number(*)”

相关问题