【问题标题】:Nodejs - response body status from OData $batchNodejs - 来自 OData $batch 的响应正文状态
【发布时间】:2019-08-09 12:20:19
【问题描述】:

在 NodeJS 和 express 中,我正在处理对 OData API 的批处理请求。有时 OData 服务在响应中返回无效结果,由状态 500 表示(可能不止一个,因为这是一个 OData 批处理响应),即使请求标头状态代码返回 200,因为与 API 本身的连接是成功的。

我是 NodeJS 的新手,我不确定如何/最好的方法来检测响应正文中的这些状态 500,以便我可以重试请求(原因是这些 500 错误通常是超时并且在下一次重试时消失) .

我是否需要一个包才能检索或拦截 res.body?我没有看到它在 express 中可用。

请求和响应示例

请求头

Request URL: https://odata/$batch
Request Method: POST
Status Code: 202 Accepted
Remote Address: xxxx
Referrer Policy: no-referrer-when-downgrade

回应

--batch_1564714041997_0
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 500 OK
Content-Type: text/plain;charset=utf-8

Internal server error

--batch_1564714041997_0
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 500 OK
Content-Type: text/plain;charset=utf-8

Internal server error


--batch_1564714041997_0--

【问题讨论】:

    标签: node.js odata nodejs-stream


    【解决方案1】:

    我会为 HTTP 状态代码使用正则表达式和捕获组。

    var regExForHTTPStatusCodeDetection = RegExp('HTTP\/1\.\\d (\\d{3})','g');
    
    var requestNumber = 1;
    
    while ((regExMatches = regExForHTTPStatusCodeDetection.exec(res.body)) !== null) {
    
      // Get status code from first capturing group
      var httpStatusCode = regExMatches[1];
    
      // Output for above example:
      // "Request 1 has returned HTTP 500."
      // "Request 2 has returned HTTP 500."
      console.log(`Request ${requestNumber} has returned HTTP ${}.`);
      requestNumber++;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2010-10-15
      • 2016-04-30
      相关资源
      最近更新 更多