【问题标题】:Would the values inside request be mixed up in callback?请求中的值会在回调中混淆吗?
【发布时间】:2018-03-02 18:09:54
【问题描述】:

我是 Node.js 的新手,我一直在阅读与此问题相关的问题和答案,但仍然不太确定我是否完全理解我的案例中的概念。

建议代码

router.post('/test123', function(req, res) { 
someAsyncFunction1(parameter1, function(result1) {
  someAsyncFunction2(parameter2, function(result2) {
    someAsyncFunction3(parameter3, function(result3) {
       var theVariable1 = req.body.something1;
       var theVariable2 = req.body.something2;
    )}
  )}
});

问题 我假设将有多个(可以是 10+、100+ 或其他)请求到某个特定位置(例如,对 /test123 的 ajax 请求,如上所示),同时带有一些变量(something1 和 something2)。根据this,一个用户的 theVariable1 和 theVariable2 不可能与另一个用户的 req.body.something1 和 req.body.something2 混合(即被覆盖)。我想知道当有多个回调(如上面的三个,或十个,以防万一)时,这是否是真的。

而且,我还考虑使用 res.locals 来保存回调中的一些数据(而不是使用 theVariable1 和 theVariable2,但考虑到由于来自客户端的多个同时请求不会覆盖数据,这样做是个好主意吗?

【问题讨论】:

  • 是的,变量不可能混淆。 functions 在 JS 中作用域。
  • 整个问题有点混乱,如果我误解了你,请原谅我。每个用户都会发出一个单独的 HTTP 请求,因此他们的代码不会发生冲突,因此变量不会在用户之间混淆。
  • 感谢您的 cmets!这正是我想问的。
  • 也可以使用res.locals在本地持久化数据(在请求范围内):expressjs.com/es/4x/api.html#res.locals

标签: node.js express callback


【解决方案1】:

Node.js/Express 服务器的每个请求都会生成一个新的 req 对象。

所以在router.post('/test123', function(req, res) 行中,作为参数传入的req 对象对于该HTTP 连接来说是唯一的。

您不必担心多个函数或回调。在传统应用程序中,如果我有两个对象catdog 可以传递给listen 函数,我将返回meowbark。即使只有一个 listen 函数。这就是您查看 Express 应用程序的方式。即使您拥有所有这些getpost 函数,每个用户的请求都会作为唯一实体传递给它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 2014-10-11
    • 2018-11-03
    • 1970-01-01
    相关资源
    最近更新 更多