从一个 GET 请求中导出输入查询并在单独的请求中使用它们
Posted
技术标签:
【中文标题】从一个 GET 请求中导出输入查询并在单独的请求中使用它们【英文标题】:export input query from one GET request and use them on separate requests 【发布时间】:2021-07-06 03:12:18 【问题描述】:我试图在我的RESTful API
查询中使用用户的输入来查询一个GET
请求,并使用该数据随机化一个数字并将该信息用于应用程序的其余部分。任何有关存储值并在整个应用程序的不同块上使用它们的最佳解决方案的指导都值得赞赏。
部分代码示例如下:
app.get("/start", (req, res) =>
const numberOfFigures = req.query.figures;
const randomBaseNumber = Math.random();
const theNumber = (randomBaseNumber * 10 ** numberOfFigures).toFixed(0);
res.send(`guess the $numberOfFigures digit number!`);
app.get("/guess", (req, res) =>
let guessedNumber = req.query.guess;
if (guessedNumber !== theNumber)
console.log("Wrong! Guess again");
我正在尝试在 /guess 请求中使用来自 /Start 请求的数字值!
【问题讨论】:
【参考方案1】:想到以下 3 种存储数据的方式:
-
将 theNumber 声明为全局变量。
将变量存储在 json 中,并在需要时导入(例如:fs 模块)。
将其存储在数据库中(例如:MongoDB)。
方法 1 是最简单的方法。该变量将可以从所有路由访问,如果您的应用重新启动,它将被删除。
let theNumber = 0;
...
app.get("/start", (req, res) =>
theNumber = ...
...
方法 2 和 3 将使变量在创建后保持不变,即使应用程序重新启动也是如此。但是,对于这个简单的用例,我会说它们有点矫枉过正。
【讨论】:
是的,全局变量会变成原始值,因为它是一个随机数,我必须为下一个端点存储或导出和导入它,对吧?否则我相信它不会起作用。另一方面,我尝试了不同的导出模块技术,但都没有结果。我需要导出开始查询作为计算的基础。其余的都可以。如何在端点上获取查询值并将其存储为 JSON 并将其导入下一个端点?这是我的主要斗争 我建议查看 node.js 中的“fs”模块,尤其是 writeFile 方法。如果您想将变量存储在 json 中,这是一个很好的起点。只需创建一个 variables.json 文件(随意命名),创建后将 Number 值写入 json,在需要使用 Number 值的任何地方都需要 json 文件(例如: const jsonValues = require('path_to_variables.json') ; ),并将其作为 json 属性访问(让 theNumber = jsonValues.theNumber;)。 我对所有变量都这样做了。唯一我想不通的是 const numberOfFigures = req.query.figures;我不知道如何导出它并将其导入另一个 JSON,因此它将被保留为 const。 它应该对所有变量都起作用,除非问题出在其他地方。你打印 req.query.figures 了吗?它是未定义的吗?您是否正确发送查询中的值? (像这样:/start?figures=3)。它适用于 req.query.guess 吗?提出这些问题可能会帮助您找到解决方案。 是的,实际上我忘了重新分配。我的论点和我的参数一样。这就是我感到困惑的原因。有效。谢谢【参考方案2】:您需要将 theNumber
变量保留在两个回调的范围之外,例如
let theNumber = 0
app.get("/start", (req, res) =>
const numberOfFigures = req.query.figures;
const randomBaseNumber = Math.random();
theNumber = (randomBaseNumber * 10 ** numberOfFigures).toFixed(0);
res.send(`guess the $numberOfFigures digit number!`);
app.get("/guess", (req, res) =>
let guessedNumber = req.query.guess;
if (guessedNumber !== theNumber)
console.log("Wrong! Guess again");
我也会将 POST 用于/guess
端点
【讨论】:
但全局值将保持为零,因为让 theNumber = 0 并且不会为下一个端点更新!对吗?theNumber = (randomBaseNumber * 10 ** numberOfFigures).toFixed(0)
将更新值
是的,但会在范围内,对吗?我正在使用这个概念,但对于下一个范围或端点,theNumber 将重置为原始全局值而不是更新后的值!
您可能需要将其声明为this.theNumber
并这样处理以上是关于从一个 GET 请求中导出输入查询并在单独的请求中使用它们的主要内容,如果未能解决你的问题,请参考以下文章