当前位置: 首页>后端>正文

问题解答:如何通过 SAP UI5 Tooling 的 Custom Middleware 打印出 HTTP 请求的响应头部字段

有朋友在学习了我这篇教程后,也想动手用 Custom Middleware 搞一些事情,比如使用代码打印 SAP UI5 应用发送的 HTTP 请求的响应头部字段,即下图红色高亮的内容:

  • SAP UI5 应用开发教程之一百八十二 - SAP UI5 Tooling 实战:动手创建自己的 Custom UI5 Server Middleware
问题解答:如何通过 SAP UI5 Tooling 的 Custom Middleware 打印出 HTTP 请求的响应头部字段,第1张

这个朋友在 Custom Middleware 的实现代码里,加上了一行 log.info(res.getHeaders())

问题解答:如何通过 SAP UI5 Tooling 的 Custom Middleware 打印出 HTTP 请求的响应头部字段,第2张

然而最后实际结果,只打印出了三个 HTTP 响应字段:其中有两个,即 access-control-allow-originlog1,还是我们自己的 Custom Middleware 里刚刚添加的。

问题解答:如何通过 SAP UI5 Tooling 的 Custom Middleware 打印出 HTTP 请求的响应头部字段,第3张

这和我们浏览器里看到的相比,也差得太多了吧。造成这个差异的原因,是因为当我们编写的 SAP UI5 Custom Middleware 得到执行的时候,我们最终在浏览器里看到的其他 HTTP 响应头部字段,还没有被框架填充到 response 对象里,所以此时打印不出来。

解决方案就是,在 Custom Middleware 里再添加一段下列代码:

res.on('finish', () => {
            console.log(`request url = ${req.originalUrl}`);
            console.log(res.getHeaders());
        });

最终完整代码如下图所示:


问题解答:如何通过 SAP UI5 Tooling 的 Custom Middleware 打印出 HTTP 请求的响应头部字段,第4张

这段代码是在一个 Express 应用中使用 Node.js 的 res 对象的 on 方法监听 'finish' 事件。当服务器端对 HTTP 请求的处理完全结束,即响应数据已经被发送到客户端时,这个 'finish' 事件会被触发,于是我们在 finish 事件对应的回调函数中,打印响应字段的头部字段,此时就可以打印出所有字段的内容了。

让我们逐行解释这段代码:

res.on('finish', () => {
    console.log(`request url = ${req.originalUrl}`);
    console.log(res.getHeaders());
});
  1. res.on('finish', ...):这一行代码通过 on 方法注册了一个 'finish' 事件的监听器。res 对象是 Express 应用中的响应对象,而 'finish' 事件是在响应结束时触发的事件。

  2. () => {:这是箭头函数的语法,定义了 'finish' 事件触发时执行的回调函数。

  3. console.log(request url = ${req.originalUrl});:这一行代码输出了请求的原始 URL。在 Express 应用中,req 对象表示请求,而 originalUrl 属性包含了原始的请求 URL,包括查询参数等信息。

  4. console.log(res.getHeaders());:这一行代码输出了响应头部信息。res 对象的 getHeaders 方法返回一个包含所有响应头的对象。这里使用 console.log 打印这个对象,显示所有响应头的名称和对应的值。

通过这段代码,我们可以实现,在 SAP UI5 Custom Middleware 里,每次 HTTP 请求完成后,记录请求的原始 URL 和响应头部信息。这个实现可以在启动 SAP UI5 应用的控制台里,打印出原本只能在 Chrome 浏览器开发者工具 Network 面板里看到的信息,对于调试和监控应用程序的网络交互有所帮助。

重新启动 ui5 serve, 此时就能打印出完整的 HTTP 请求的响应头部字段了:

问题解答:如何通过 SAP UI5 Tooling 的 Custom Middleware 打印出 HTTP 请求的响应头部字段,第5张

https://www.xamrdz.com/backend/3s31940618.html

相关文章: