如何在 NodeJs 中运行 SOAP 请求?

2024-03-15

起初这听起来像是一个重复的问题,但我已经浏览了我找到的所有博客/教程/视频,但没有一个真正说明了如何运行该请求。示例:对于 RESTful 请求,您在 NodeJs 中编码,点击路由 (https://localhost/3000/api/getStudent) 并获取响应。在代码中使用 router.post('/getStudent', async (req,res) => { // 在此处检查响应或进行操作 })

但在肥皂中编码完所有功能后,如下所示-

  1. https://medium.com/metrosystemsro/with-node-js-wrap-backend-soap-webservices-in-a-restful-api-a96887575046 https://medium.com/metrosystemsro/with-node-js-wrap-backend-soap-webservices-in-a-restful-api-a96887575046
  2. https://dafabulousteach.wpcomstaging.com/2016/05/19/making-a-soap-call-with-node/ https://dafabulousteach.wpcomstaging.com/2016/05/19/making-a-soap-call-with-node/
  3. https://betterprogramming.pub/how-to-perform-soap-requests-with-node-js-4a9627070eb6 https://betterprogramming.pub/how-to-perform-soap-requests-with-node-js-4a9627070eb6

在哪里调用该函数以及如何传递参数并测试它?我如何检查响应?


为了将其置于您所询问的上下文中,SOAP 服务只是侦听具有 XML 负载的 POST 请求的地址的服务器。就是这样。

因此,如果您的 SOAP Web 服务地址是http://example.com/service_endpoint然后您可以通过在此地址发出 POST HTTP 请求并向其发送 SOAP XML 消息作为负载来调用 Web 服务。

显然,请求中的 XML 消息必须与服务期望的内容相匹配,并且您知道如何通过阅读文档或使用 WSDL 来构建 XML https://d-petre-bogdan.medium.com/the-wsdl-is-not-the-soap-web-service-97f307c4a90bSOAP Web 服务。

因此,如果您知道如何向 REST 服务地址发出 POST HTTP 请求并向其发送 XML 有效负载(尽管对于 REST,您通常使用 JSON),那么您就已经知道如何调用 SOAP Web 服务。

现在,为了方便起见,由于 SOAP 是一种协议,您调用服务的方式以及它期望的 XML 有效负载由 WSDL 描述,您可以使用读取 WSDL 的工具并创建一个可以像调用任何其他 API 一样调用的客户端 API。代码中的其他方法。这些工具为您处理 HTTP POST 请求的详细信息,以及将任何参数编组为 XML。这可能是您感到困惑的地方。

让我们举个例子。

比如说,如果您有一个服务,其操作名为savePerson它接受firstName and lastName作为参数并在 WSDL 中进行描述,那么您的工具可能会生成一个具有此类方法并接受Person对象,你可以这样称呼它:

var response = client.savePerson({ "firstName": "Kim", "lastName": "Seokjin" });

或此的一些变体。然后您会收到一个响应,您可以像任何其他对象一样读取该响应。相反,你可能会得到一个承诺,或者一个事件,或者客户选择的任何工作方式。当您使用此代码时,会发生的情况是client在后台为您执行 HTTP POST 请求并将 person 对象编组为 XML,如下所示:

POST /service_endpoint
Host: http://example.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
 <SOAP-ENV:Body>
  <savePerson>
   <person>
     <firstName>Kim</firstName>
     <lastName>Seokjin</lastName>
   </person>
  </savePerson> 
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

如果您不想从 WSDL 生成客户端,显然您可以使用您喜欢的任何 HTTP 库自行发送此请求。但人们更喜欢使用生成的客户端,而不是直接处理这些细节(即发出 HTTP 请求、解析 XML 等)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 NodeJs 中运行 SOAP 请求? 的相关文章

随机推荐

  • 并行运行过程 - Oracle PL/SQL

    我正在尝试使用 dbms scheduler 并行运行存储过程 Oracle PL SQL 但出现类似未知作业的错误 我也尝试过 dbms job 这里出现错误 必须声明标识符 dbms jobs 有人可以帮我吗 以下是我尝试过的两种方法
  • 如何制作 text-decoration: 下划线和 2px 填充?

    我喜欢听话的前端开发人员必须创建带有 2 像素填充的下划线 而不是默认的 1 像素 是否存在简单的解决方案 PS 是的 伙计们 我知道 div 具有黑色背景颜色和 1px Npx 和位置 相对 但它太慢了 对于交叉浏览 最好使用text u
  • 替换git中的master分支并防止快进

    我在 github 上有一个库 大约一年前 我完全重写了该应用程序 但不向后兼容 它位于一个名为 结构化 的分支上 现在大多数安装该库的人都在使用该分支 我想将其设为主分支并将当前主分支移至 旧版 我不希望使用旧主机的人能够快进到新主机 因
  • 如何使用 Seed.rb 有选择地填充开发和/或生产数据库?

    我正在使用 seeds rb 来填充我的开发和生产数据库 我通常用虚拟数据填充第一个 然后用我的应用程序运行所需的实际最小数据 例如第一个用户等 填充后者 如何在 Seed rb 中指定每个数据的环境 鉴于我知道 group 是一个 Gem
  • 何时应使用链表的现实世界示例有哪些?

    另一位程序员提到 在他的职业生涯中 他们还没有在任何专业软件中找到使用链表数据结构的用例 我一时想不出什么好的例子 他主要是 C 和 Java 开发人员 谁能举一些例子来说明这是解决特定现实世界问题的正确数据结构 Related 链表的实际
  • 询问 Python 值“是否可散列”

    我感兴趣的是采用任意字典并将其复制到新字典中 并一路改变它 我想做的一项改变是交换键和值 不幸的是 有些价值观本身就是命令 但是 这会生成 不可散列类型 dict 错误 我真的不介意只是将值字符串化并为其提供密钥 但是 我希望能够做这样的事
  • 是否可以在 Chrome 开发者工具元素面板中选择多个元素?

    是否可以在 Chrome 开发者工具元素面板中一次选择多个元素 对于删除多个同级元素或快速重新排序非常有用 我期望Command Click or Shift Click这样做但没有成功 答案是否定的 在 Chrome 开发工具中一次无法选
  • Python kivy - 如何减少TextInput的高度

    我正在使用 kivy 为应用程序制作一个非常简单的 GUI 没什么复杂的 布局非常简单 尽管如此 我在 TextInputs 方面遇到了困难 它们总是以全高显示 我无法设法使它们调整到 合理的 文本高度 如高度 我正在使用 kv 文件样式
  • 使用 QQuickImageProvider 的正确方法是什么?

    我需要动态选择 qpixmaps 以显示在 QML 图像项中 该 qpixmaps 应该从源 qpixmap 中裁剪出来 我将从 QML 文件中设置它 我希望它们能够根据 QML 的第一个需求被 C 代码裁剪并缓存以供将来使用 对于动态图像
  • 使用 Javascript 重新定位

    我试图根据特定条件在页面上重新定位 div if somecondition document getElementById Div1 setAttribute style position absolute left 297px top
  • Android Studio 上的 Flutter 崩溃

    Android studio崩溃并且无法运行项目 flutter升级到2 0后 flutter doctor 没有问题 dart 修复不起作用 建议在这里 Flutter项目升级到2 0 0后编译错误 https stackoverflow
  • 在网格视图上突出显示所选项目

    我试图突出显示 gridview 上的选定项目 使用适配器动态填充 但它不起作用 我做了研究 我什至尝试准确复制其他人的选择器 甚至他们将其放在 gridview 上的方式 但我无法让它工作 它只是没有做任何事情 每个项目的背景都是白色的
  • websocket消息会丢失吗?

    我目前正在开发一个 Java WebSocket 客户端应用程序 我必须确保客户端收到来自服务器的每条消息 由于连接中断 我是否可能丢失一些消息 一旦从服务器发送消息 WebSocket 基于 TCP 所以这种情况不应该发生 对吗 这有可能
  • 长双精度文字的 C++ 后缀是什么?

    在 C 和 C 中 不带后缀的浮点文字默认为double 而后缀f意味着一个float 但是获得 a 的后缀是什么long double 在不知道的情况下 我会定义说 const long double x 3 14159265358979
  • 什么是 CDI 豆?

    我有点困惑 我们将 CDI bean 称为我们注入它们的 bean Inject注释或我们使用的bean Inject他们里面 CDI豆是 CDI 可以实例化 管理和注入的类 自动满足其他对象的依赖关系 几乎任何 Java类可以由CDI管理
  • JSF/Primefaces AJAX 请求真的是异步的吗?

    我是 JSF 新手 所以我不知道我面临的行为是否正常 我有这个代码
  • PHP PDO 的单例替代方案

    这是我用来连接到我的课程MySQL数据库 正如你所看到的 我正在使用Singleton Pattern但几乎每个帖子都说这是一个非常糟糕的模式 创建数据库连接类的最佳方法是什么 有更好的模式吗 class DB extends PDO fu
  • C# 中的冗余?

    采取以下片段 List
  • com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException:当 autocommit=true 时无法调用回滚

    我在我的应用程序中使用 Jboss 5 0 和 mysql 并且会有很多并发操作 并且数据库包含相当多的记录 这个错误经常出现 时不时地 com mysql jdbc exceptions MySQLNonTransientConnecti
  • 如何在 NodeJs 中运行 SOAP 请求?

    起初这听起来像是一个重复的问题 但我已经浏览了我找到的所有博客 教程 视频 但没有一个真正说明了如何运行该请求 示例 对于 RESTful 请求 您在 NodeJs 中编码 点击路由 https localhost 3000 api get