Express JS处理多个请求,并将响应返回给发出请求的浏览器

时间:2020-06-15 13:11:44

标签: javascript node.js express axios

我创建了一个小的Express JS api,该API接收有关用户的数据,在本例中为包含许多表单字段的应用。我的Express JS端点背后的想法是简单地处理往返于服务器的请求,然后向发出请求的浏览器(用户)报告,我当前的设置是:

let applications = {}

app.post('/api/submit/:id', (req, res) => {

  try {

    submitApplication(req.body, req.params.id)

    res.status(200).send({
      code: 200,
      success: true
    })

  } catch (error) {

    // handle error

  }

})


function submitApplication (body, id) {

  applications[id] = body != null ? body : {}

  const application = applications[id]

  application.Result = 'Processing'

  axios.post('https://example.com/api', JSON.stringify(applications[id]), {
            headers: {
                'Content-Type': 'application/json'
            }
        })
        .then(response => {

          application.Result = response.data.Result

        })
        .catch(error => {

          // error

        });
}

在上面的代码中,可能有10个不同的浏览器,每个浏览器都向Express JS端点提交数据,:id是我在浏览器的客户端上生成的唯一生成的数字,因此各个axios请求可以通过其ID更新相关的应用程序。

我正在尝试确定是否...约翰提交了一个应用程序,接着是简,是submitApplication函数将并行运行,还是等到第一个函数完成之后,看起来像我的观察是它正在并行运行,并且没有等到第一个完成,这就是我所需要的,但是我不确定。

Axios中引用的api最多可能需要3分钟才能返回响应。

1 个答案:

答案 0 :(得分:1)

是的,事情在nodejs上“并行”运行。您的代码可以正确处理上下文,因此多个axios操作不会使数据彼此混淆。

如果您不确定有关此承诺的内容,请阅读。它们就是.then().catch()的实现方式。

请注意,在您的这段代码中:

submitApplication(req.body, req.params.id)
res.status(200).send({code: 200,success: true})

第二行立即运行,而不是axios成功完成时。如果要等待,则必须在回调或Promise.then()函数中运行第二行。

还请注意:如果您在客户端中随机生成id个数字,明智的做法是从很大范围的数字中选择它们,以减少发生冲突的可能性。