如何在NodeJs中运行SOAP请求,传递参数并获取校验响应?
Node.js 调用SOAP请求完整实现指南
前置准备
首先安装所需依赖:
npm install soap express
完整可运行代码示例
以下示例将SOAP调用和你熟悉的REST路由结合,你可以直接复用已有的REST服务逻辑:
const express = require('express'); const soap = require('soap'); const app = express(); app.use(express.json()); const router = express.Router(); // SOAP调用封装函数 async function callSoapGetStudent(studentId) { // 替换为实际的SOAP服务WSDL地址 const wsdlUrl = 'https://你的实际SOAP服务地址?wsdl'; // 创建SOAP客户端 const client = await soap.createClientAsync(wsdlUrl); // 传递参数调用SOAP方法,方法名需和WSDL里定义的一致 const [result] = await client.getStudentAsync({ id: studentId }); // 返回解析后的JSON格式响应 return result; } // 你熟悉的REST路由,在这里调用SOAP函数 router.post('/soapGetStudent', async (req, res) => { try { // 从REST请求里拿参数传给SOAP调用函数 const studentId = req.body.id; // 调用SOAP函数获取响应 const soapResult = await callSoapGetStudent(studentId); // 在这里校验SOAP返回的响应 if (!soapResult?.studentName) { return res.status(400).json({ msg: '未找到对应学生' }); } // 返回结果给前端 res.json({ data: soapResult }); } catch (err) { // SOAP调用报错处理 res.status(500).json({ msg: 'SOAP调用失败', error: err.message }); } }); app.use('/api', router); app.listen(3000, () => { console.log('服务运行在 http://localhost:3000'); });
关键环节说明
- 函数调用时机:你可以选择两种触发方式,一是像上面一样挂载到REST路由,收到REST请求时触发SOAP调用;二是单独写脚本直接执行
callSoapGetStudent函数,不需要启动web服务,直接跑脚本就能拿到结果 - 参数传递:入参直接按WSDL定义的字段名传JavaScript对象即可,soap库会自动拼接成符合规范的SOAP XML报文,不需要手动处理XML格式
- 响应校验:soap库会自动把返回的SOAP XML报文解析成JavaScript对象,你直接取对应字段做非空、格式校验即可,和处理普通接口返回的JSON没有区别
测试方法
- 如果是挂载到REST路由的形式,直接用Postman、Apifox等工具调用
http://localhost:3000/api/soapGetStudent,传参{"id": 123}就能拿到返回结果 - 如果是单独脚本的形式,直接执行
node 你的脚本文件名.js,在控制台打印soapResult就能看到返回内容
内容的提问来源于stack exchange,提问作者Kim Seokjin
相关产品推荐
相关产品推荐

