当前位置 : 主页 > 网页制作 > Nodejs >

在node.js中的AWS lambda函数之间共享代码

来源:互联网 收集:自由互联 发布时间:2021-06-16
似乎不可能传递一些在另一个AWS lambda函数中作为AWS lambda函数调用的代码(包含数据和函数). 例如,使用此customConfigLambda: var callbackPayload = {};callbackPayload.fooData = 'fooFromData';callbackPayload.f
似乎不可能传递一些在另一个AWS lambda函数中作为AWS lambda函数调用的代码(包含数据和函数).

例如,使用此customConfigLambda:

var callbackPayload = {};

callbackPayload.fooData = 'fooFromData';
callbackPayload.fooFunction = function() {return 'fooFromFunction'; };

exports.handler = (event, context, callback) => {
    callback(null, callbackPayload);
};

当我在另一个AWS lambda函数中调用之前的AWS lambda函数时,如下所示:

var AWS = require('aws-sdk');
AWS.config.update({accessKey: '123', secretAccessKey: 'abc', region: 'us-east-1' });
var lambda = new AWS.Lambda({region: 'us-east-1'});

exports.handler = (event, context, callback) => {
    var params = {FunctionName: 'customConfigLambda'};
    lambda.invoke(params, function(err, callbackPayload) {
        if (err) {
            // do nothing
        }
        else {
            console.log('callbackPayload:', JSON.stringify(callbackPayload, null, 2));
        }
    });
};

然后我只能看到callbackPayload.fooData而不是callbackPayload.fooFunction.

如何在多个其他AWS lambda函数之间共享一些callbackPayload.fooFunction?

请参阅有关使用回调参数的文档:

> http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html#nodejs-prog-model-handler-callback

它说明了结果(代码中的callbackPayload):

result – is an optional parameter that you can use to provide the
result of a successful function execution. The result provided must be
JSON.stringify compatible. If an error is provided, this parameter is
ignored.

要兼容JSON.stringify,你不能拥有任何功能.请参阅http://json.org/以查看什么是有效的JSON(仅限字符串,数字,对象,数组,true,false和null).

如果您希望在广义上在AWS Lambda函数之间共享代码,则必须在两者中都需要相同的Node模块,以便您可以为所有AWS Lamda处理程序提供一组通用函数.但是你不能在它们之间传递任意代码,因为它们无法在JSON.stringify中存活.

作为测试,您可以尝试在浏览器中运行它:

var callbackPayload = {};

callbackPayload.fooData = 'fooFromData';
callbackPayload.fooFunction = function() {return 'fooFromFunction'; };

alert(JSON.stringify(callbackPayload));

(见DEMO)
或节点中的这个:

var callbackPayload = {};

callbackPayload.fooData = 'fooFromData';
callbackPayload.fooFunction = function() {return 'fooFromFunction'; };

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

并看到结果:

{"fooData":"fooFromData"}

在序列化过程中删除了这些函数.

当然你可以这样做:

callbackPayload.fooFunction
    = function() {return 'fooFromFunction'; }.toString();

并获得JSON结果:

{"fooData":"fooFromData","fooFunction":"function () {return 'fooFromFunction'; }"}

你理论上可以在另一端评估,但我不会真的推荐它.

网友评论