我必须为我的一个项目使用NestJs中的SOAP服务。我正在尝试使用来自Web的虚拟SOAP服务。以下是详细信息-
网址-
http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService.wso?WSDL
方法- POST
标题-
Content-Type: text/xml
请求正文-
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<CapitalCity xmlns="http://www.oorsprong.org/websamples.countryinfo">
<sCountryISOCode>IN</sCountryISOCode>
</CapitalCity>
</Body>
</Envelope>
响应正文-
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<m:CapitalCityResponse xmlns:m="http://www.oorsprong.org/websamples.countryinfo">
<m:CapitalCityResult>New Delhi</m:CapitalCityResult>
</m:CapitalCityResponse>
</soap:Body>
</soap:Envelope>
现在我还不知道如何在我的NestJs虚拟应用程序中使用这个服务。
npm install nestjs-soap --save
我的应用模块
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { SoapModule } from 'nestjs-soap';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true
}),
SoapModule.registerAsync([
{ name: 'MY_DUMMY_CLIENT', uri: `http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService.wso?WSDL` }
])
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
我的应用服务
import { Inject, Injectable } from '@nestjs/common';
import { Client } from 'nestjs-soap';
@Injectable()
export class AppService {
constructor(@Inject('MY_DUMMY_CLIENT') private readonly myDummyClient: Client) {}
getHello(): string {
return process.env.APP_MESSAGE;
}
getDetails(): string {
return process.env.APP_DETAILS;
}
asyncGetCountryCapital() {
//this.myDummyClient.
}
}
由于我参考的文档不详细,我无法弄清楚如何在asyncGetCountryCapital()函数中调用SOAP服务。
2条答案
按热度按时间zphenhs41#
今天我需要做同样的事情,结果发现
nestjs-soap
的文档并不是那么清晰。在尝试了几件事后,这就是我的工作。
1.使用 * 方法 *
文件在这里。
不发送参数的示例
模块:
控制器:
注意第一个参数,我需要传递
null
(也可以是{}
),因为没有它,我无法在第二个参数中声明函数。此外,我还使用
new Promise()
封装了它,以便能够将其返回给客户机。发送参数示例
模块:
让我们使用另一个
uri
,这是我能找到的唯一一个。控制器:
注意第一个参数,您需要传递一个具有所需属性的对象。
2.使用 * 方法异步 *
文件在这里。
不发送参数的示例
发送参数示例
这里的关键是在你的函数名后面加上单词
Async
。例如,取前面的函数ListOfContinentsByName
,名字将是ListOfContinentsByNameAsync
。我通过仔细研究nodejs soap库得到了这个解决方案。关于如何使用它的第一个例子显示,你需要有一个
client
函数和一个method
函数。然后,查看GitHub上nestjs-soap库的代码,我发现他们只给了你
client
函数,而不是两者都给。您/我们需要提供
method
函数,例如:使用 * 方法 *
使用 * 方法异步 *
希望对你有帮助。
apeeds0o2#
我找到了如何使用它,并在文档中。你需要打电话
this.soapClient.describe(),并且在响应中包含客户端允许的所有方法。
:)