Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js lambda AWS环境中的nodejs中止提取_Node.js_Aws Lambda - Fatal编程技术网

Node.js lambda AWS环境中的nodejs中止提取

Node.js lambda AWS环境中的nodejs中止提取,node.js,aws-lambda,Node.js,Aws Lambda,我设法在本地环境的nodejs中安装了一个工作中止控制器,非常简单: const signal = controller.signal; setTimeout(() => controller.abort(), 5000); fetch(url, { signal }).then(response => { return response.text(); }).then(text => { console.log(text); }); 因此,我可以在n秒后中止请求

我设法在本地环境的nodejs中安装了一个工作中止控制器,非常简单:

const signal = controller.signal;

setTimeout(() => controller.abort(), 5000);

fetch(url, { signal }).then(response => {
  return response.text();
}).then(text => {
  console.log(text);
});
因此,我可以在n秒后中止请求。它在本地环境中工作时不会出现问题,但是在Lambda中部署到AWS时,最终会出现错误

TypeError:预期信号是中止信号的实例

在挖掘fetch模块源代码后,似乎这一行是罪魁祸首:

!isAbortSignal(信号)

从该函数::

function isAbortSignal(signal) {
    const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
    return !!(proto && proto.constructor.name === 'AbortSignal');
}
local中的
proto.constructor.name
正确为“AbortSignal”,而在AWS lambda中,它最终只是“a”

我四处搜索,但我找不到任何关于为什么这不起作用的具体信息。有什么提示吗?

您正在使用节点获取模块吗?本机NodeJ中不存在fetch和AbortController。您需要为每个节点使用nodejs polyfill


看起来它应该在node fetch v3中修复(目前处于测试版)

在我的例子中,我在将代码上传到AWS之前使用Webpack捆绑,升级到3.0.0-beta.4之后,它起到了作用

如果您无法升级并使用网页包,请尝试:

optimization: {
    minimizer: [
      new TerserPlugin({
        terserOptions: {
          mangle: false,
          keep_classnames: true,
          keep_fnames: true,
        },
      }),
    ],
  },
如果不起作用,尝试配置
优化。将
最小化为
false