【问题标题】:Update a query parameter Node.js更新查询参数 Node.js
【发布时间】:2019-10-16 16:09:36
【问题描述】:

使用 Node.js / Express 我正在定义一个路径,传递一个请求和响应。

我总是希望在命中此路径时包含一个种子 url 参数,因此我将该种子查询参数设置为 0 并重定向该 url。

接下来我要做的是随机化每个请求/响应的参数,并根据另一个 url 参数的附加值更新 url,在本例中为 random=true

默认路由应该类似于localhost:3000/default?seed=0

如果使用了random=true 参数,则路由可能看起来像localhost:3000/default?seed=456&random=true,其中种子在每个请求上都会更新。

我的代码(server.js 使用 express、canvas 和 url 模块):

`app.get("/default", (req, res) => { 

 //some logic to generate random numbers for the seed parameter
 let seed = Math.round(Math.ceil(Math.random() * parseInt(req.query.seed + 1) * 100))

 // if we hit the path and no seed param is defined always give it zero
 if(!req.query.seed) { 
    req.query.seed = 0; 

    res.redirect(url.format({ // redirect the url with the new param 
      pathname: '/canvas',
      query: req.query
    }))
 }

 //if we hit the path and the random param is set to true and there is a seed parameter
 if(req.query.random === 'true' && req.query.seed) {
   req.query.seed = seed; // use randomized seed as the new seed param value

   res.redirect(url.format({ // redirect to the url with the updated seed
      pathname: '/canvas',
      query: req.query
   }))

   //render our response
   canvas(req, res);
});`

我所看到的:网址似乎正在更新我得到的结果如下:

/default?seed=115&random=true, /default?seed=21457&random=true, etc

但是我的画布没有渲染,我在浏览器中收到太多重定向错误localhost redirected you too many times.

我对 Node 中的重定向概念不太了解,但如果有人能指出我正确的方向以便不再是错误,我将不胜感激。谢谢

【问题讨论】:

  • 您没有会破坏重定向的条件。最初/default?seed=115&random=true 被重定向到/default?seed=21457&random=true,而/default?seed=21457&random=true 又被重定向到/default?seed=[some_number]&random=trueseedrandom 始终存在于查询中,因此您的条件 if(req.query.random === 'true' && req.query.seed) 将始终为真。因此有多个重定向。
  • 如果 random 为 true 并且有种子参数重定向到具有 random=true 和 seed=某个随机数的相同 url ...如果 random 为 true 并且有种子参数重定向到具有 random= 的相同 url真和种子=某个随机数...如果随机为真并且有种子参数重定向到具有随机=真和种子=某个随机数的相同网址...如果随机为真并且有种子参数重定向到相同的网址random=true 和 seed=some random number ...如果 random 为 true 并且种子参数重定向到具有 random=true 和 seed=some random number 的相同 url ...(这将永远持续)
  • :facepalm: 谢谢大家

标签: javascript node.js express


【解决方案1】:

您的问题是您正在无限重定向。当用户到达/default 时,您创建查询参数...并使用查询参数将它们重定向回/default,然后您再次更新查询参数,并将它们永远发送到/default。您的浏览器意识到您被困在一个无限循环中,并以“重定向过多”错误将您从它中解救出来。您需要在重定向周围设置中断条件。

也许

if(!res.query){
   res.redirect(url.format({ // redirect to the url with the updated seed
      pathname: '/canvas',
      query: req.query
   }))
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-06
    • 1970-01-01
    • 2017-10-14
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多