【问题标题】:Storing data accross requiest/response cycles in Express (Node JS)在 Express(Node JS)中跨请求/响应周期存储数据
【发布时间】:2021-12-05 00:19:30
【问题描述】:

我目前正在使用 nodejs 和 express 开发一个简单的应用程序。我加载一个随机数,用户将该数字翻译成西班牙语,然后用户提交它。然后我需要将用户的答案与实际翻译进行比较,看看用户是否正确。

我的主页的路线非常简单:我为游戏中用户的给定关卡渲染了一个带有随机数的布局,以及一个随机名词(两者都是我从单独文件中需要的函数) .

app.get('/', catchError(async (req, res) => {
  res.render("layout", {
    num: randNumForLevel(0),
    noun: randNoun(),
  });
}))

但是,这是我的挑战:当用户单击“提交”时,我需要将他们的答案与实际的西班牙语翻译进行比较(在本例中是数字“20”)。但是,按照我目前构建代码的方式,我生成了数字并将其直接传递到我的视图中,这意味着我无法在下一个请求/响应周期中访问它。

所以我的问题是:我应该将这个随机生成的数字(在本例中为“20”)存储在哪里,以便在用户提交表单时我仍然可以访问它。我应该把它放在会话中吗?应用程序本地人?别的地方?不确定最佳做法是什么,所以希望得到一些建议。

【问题讨论】:

  • 你对那些试图帮助你的人的回应是-1吗?您的问题很常见,但我不知道您是否需要帮助或确切的解决方案。

标签: javascript node.js express view


【解决方案1】:

发送实际翻译和随机生成的数字的主要问题是客户端很容易作弊并看到翻译

我认为您需要调整发送号码的方式。

作为一个示例,我将使用数据库来存储具有以下架构的级别 1 的数字:

{ id: '1', number: 20, level: '1' }

您始终可以将它们作为 JavaScript 对象存储在内存中并按级别过滤它们。

const my_db = {
  level1: [
    { id: '1', number: 10, level: '1', answer: 'diez' },
  ]
}
// create challenge programmatically 
let randNum = randNumForLevel(0)
let noun = randNoun()
let answer = getTranslationFor(randNum)
my_db.level1.push({ id: '2', number: randNum, answer: answer  })

将挑战的 id 和随机数发送给客户端。 来自客户端的响应应该包含挑战的 id 和用户翻译。

在您的数据库或 js 对象上搜索给定的 id,比较用户翻译和正确的翻译,一切顺利

不错!现在您可以在不发送实际翻译的情况下比较数字。

【讨论】:

    猜你喜欢
    • 2018-10-17
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多