Node.js 节点中的AWS Lambda done callback()函数

Node.js 节点中的AWS Lambda done callback()函数,node.js,amazon-web-services,aws-lambda,aws-sdk-nodejs,Node.js,Amazon Web Services,Aws Lambda,Aws Sdk Nodejs,Lambda中的microservice http endpoint starter函数包含以下结束该函数的代码: const done = (err, res) => callback(null, { statusCode: err ? '400' : '200', body: err ? err.message : JSON.stringify(res), headers: { 'Content-Type': 'application/json'

Lambda中的microservice http endpoint starter函数包含以下结束该函数的代码:

const done = (err, res) => callback(null, {
    statusCode: err ? '400' : '200',
    body: err ? err.message : JSON.stringify(res),
    headers: {
        'Content-Type': 'application/json',
    },
});
在编写了一个只有Lambda的API和几个端点之后,我发现自己在所有函数中都使用了相同的代码。我的第一反应是将其放入一个模块中,使代码更加丰富,但如果这样做,
callback()
函数将超出范围

我只是从我的函数返回JSON,所以这将是我特定用例中唯一可能的内容类型


人们是如何处理这件事的?是否有一种实用(且优雅)的方式来封装此代码?或者是更好的选择?

只需嵌套以下函数:

const regularize = (awsCallback) => (err, res) => {
  awsCallback(...perYourAboveCode(err, res))
};
然后,处理程序可能看起来像:

const myHandler = (event, context, awsCallback) => {
  const callback = regularize(awsCallback);
};

只需将
global.callback=callback
设置为Lambda处理程序函数的第一行,它就永远不会超出作用域。@idbehold将此发送到global会感到不确定。特别是像“回调”这样的泛型,但是Lambda容器实例一次只能运行一个处理程序。如果您调用一个Lambda函数,然后在第一次调用完成之前再次尝试调用同一个Lambda函数,那么第二次调用将得到一个全新的容器来运行。只有处理程序函数完成(或超时)后,该容器才能再次可用。因此,全局函数在Lambda函数的上下文中并不重要。如果全局名称让您感觉更好,您可以随时将其更改为更具体的名称
global.MY\u SUPER\u SECRET\u CALLBACK=CALLBACK