【发布时间】: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=true。seed和random始终存在于查询中,因此您的条件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