使用 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 framework
和 typescript
构建一个无服务器应用程序,并使用 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有三种方式(不使用,动态使用,静态使用,默认是动态使用)