【问题标题】:AWS Lambda node-soap function (serverless framework)AWS Lambda node-soap 函数(无服务器框架)
【发布时间】:2019-07-23 12:30:20
【问题描述】:

我正在使用 node-soap 库测试对 SOAP 服务的调用。 这可以作为独立的 node.js 应用程序正常工作,并且 SOAP 服务会响应,但是当我将相同的代码打包为无服务器 AWS lambda 函数(使用无服务器框架,但也直接在 AWS lambda 中执行)时,它似乎没有创建soap客户端。

对为什么会发生这种情况有任何想法吗?

export async function main(event, context) {
    var soap = require('soap');
    var url = 'https://service.blah.co.uk/Service/Function.asmx?wsdl';

    var soapOptions = {
        forceSoap12Headers: true
    };

    var soapHeader = {
        'SOAPAction': 'http://www.blah.co.uk/Services/GetToken'
    };

    var params = {
        xmlMessage: message
    };

    console.log(JSON.stringify(params));

    soap.createClient(url, soapOptions, function (err, client) {
        //the serverless AWS lambda function never reaches this point (deployed and invoked locally)

        console.log("In create client")
        if (err) console.log(err);
        client.addSoapHeader(soapHeader);
        client.GetToken(params, function (err, data) {
            console.log(data);
        });
    });
}

【问题讨论】:

  • 你确定这行得通吗?我在本地测试过,soap.createClient() 里面的代码永远不会执行。
  • 我添加了一个工作示例。

标签: node.js aws-lambda serverless-framework node-soap


【解决方案1】:

我使用async/await 创建了一个非常简单的工作示例。而不是使用旧式回调方法,只需调用soap.createClientAsync(url)。

代码如下:

'use strict';
const soap = require('soap');
module.exports.hello = async (event, context) => {

    const url = 'http://www.thomas-bayer.com/axis2/services/BLZService?wsdl';

    const client = await soap.createClientAsync(url)

    console.log(client)

    return {
      statusCode: 200,
      message: 'It works!'
    }
}

这里是日志(部分):

编辑:函数的输出(通过 AWS 的 Lambda 控制台)

编辑 2 - 真正的问题

查看上面关于 async/await 的链接。 async 关键字将异步执行并返回一个 Promise。由于它是一个异步函数,因此您的 Lambda 在实际执行您的回调之前就被终止了。

使用 async/await 将使您的代码更简单,并且让您不再为这样的小事绞尽脑汁。

【讨论】:

  • 感谢您的回复 - 这解决了我的问题。我也会采纳你关于 async/await 的建议。
猜你喜欢
  • 2023-03-16
  • 2017-11-20
  • 2019-01-04
  • 2021-03-10
  • 2019-09-06
  • 2021-12-05
  • 2021-10-07
  • 2021-06-03
  • 1970-01-01
相关资源
最近更新 更多