使用 aws-cognito-identity-js 时获取的类型错误

Posted

技术标签:

【中文标题】使用 aws-cognito-identity-js 时获取的类型错误【英文标题】:type error for fetch while using aws-cognito-identity-js 【发布时间】:2020-02-21 05:10:19 【问题描述】:

我正在使用 serverless frameworktypescript 构建一个无服务器应用程序,并使用 aws cognito 进行用户身份验证。 当我在local serverless environment 中使用该应用程序时,一切正常。 我可以注册一个用户,也可以让用户登录以接收jwt token

但是当我将代码部署到 aws 时,它给了我 "message": "fetch is not a function",

所以我经历了不同的 github 问题/堆栈溢出,并看到每个人都通过添加 global.fetch 来提出类似的解决方案 这篇文章中的类似解决方案 -> Nuxt application with amazon-cognito-identity-js package gives error fetch is not defined

global.fetch = require('node-fetch')
const AmazonCognitoIdentity = require('amazon-cognito-identity-js');

所以我添加了上述内容并执行了 npm install of node-fetch 并推送了代码 但是问题就不同了,因为我使用的是打字稿,所以我不能使用global.fetch

所以我在本地找到了不同的方法来改变它

Way 1 
const globalAny:any = global;
globalAny.fetch = require('node-fetch');

Way 2
(global as any).fetch = require('node-fetch');

Way 3 -> Written at the end of this post. https://***.com/questions/48433783/referenceerror-fetch-is-not-defined

当我在本地和 AWS LAMDA 中以两种方式运行它时,它会失败并出现相同的错误

TypeError: fetch is not a function

所以我别无选择,正在寻找是否有人可以帮助我。

【问题讨论】:

【参考方案1】:

如果项目中使用了 webpack,global.fetch 将不起作用。在应用程序根级别添加以下库。(推荐用于 serverless-webpack / lambda codestart 的任何其他 web pack)

require('cross-fetch/polyfill');

【讨论】:

【参考方案2】:

较新版本的 node fetch 存在与 webpack 相关的问题,您可以在此线程中找到相关信息。 https://github.com/bitinn/node-fetch/issues/450

降级到 node-fetch@1.7.3 以让您的 cognito 正常工作。

【讨论】:

以上是关于使用 aws-cognito-identity-js 时获取的类型错误的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份