繁体   English   中英

AWS Lambda节点肥皂功能(无服务器框架)

[英]AWS Lambda node-soap function (serverless framework)

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

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

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);
        });
    });
}

我使用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关键字将异步执行并返回Promise。 由于它是一个异步函数,因此Lambda在实际执行回调之前会被终止。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM