【问题标题】:IBM Cloud Functions: Can't find 'ibm-watson/auth' packageIBM Cloud Functions:找不到“ibm-watson/auth”包
【发布时间】:2021-06-05 11:42:36
【问题描述】:

我正在使用IBM Cloud functions 从IBM Watson Discovery 请求一些结果。有一个非常好的 GitHub repo here 关于我们如何调用它。但是,在函数中设置操作的过程中,出现错误消息 Cannot find module 'ibm-watson/auth'。我理解消息的内容,但如果您查看 GitHub 存储库,您会发现我应用了完全相同的步骤。我的 IBM Cloud 功能代码是:

case 'doc_info':
            var user_input = params.user_input;
            const watson = require('ibm-watson/sdk');
            const { CloudantV1 } = require('@cloudant/cloudant');
            const DiscoveryV1 = require('ibm-watson/discovery/v1');
            const { IamAuthenticator } = require('ibm-watson/auth');
            //const { IamAuthenticator } = require('ibm-cloud-sdk-core');

            try {
                const discovery = new DiscoveryV1({                 // Initializing Discovery
                    version: '2020-11-24',
                    authenticator: new IamAuthenticator({
                        apikey: params.apiKeyDisco,
                    }),
                    serviceUrl: params.urlDisco,
                });

                const cloudant = new CloudantV1({                   // Initializing CloudantV1
                    authenticator: new IamAuthenticator({
                        apikey: params.apiKeyCloudant
                    })
                });
                cloudant.setServiceUrl(params.urlCloudant);
                 
                 // ...
                 return {
                   answer: "Simple test"
                 };
                
            } catch (err) {
                console.log(err)
                return Promise.reject({
                  statusCode: 500,
                  headers: { 'Content-Type': 'application/json' },
                  body: { message: err.message },
                });
            }
            break;

我什至尝试从 ibm-cloud-sdk-core 包中调用 IamAuthenticator,但是错误是 IamAuthenticator 不是构造函数。我们如何解决这个问题?

【问题讨论】:

  • 您使用的是哪个节点版本?你如何创建动作?
  • 我已经在版本 12 上对其进行了测试,它正在工作,但在版本 10 上 - 失败了。我知道版本 10 的支持即将结束,但它是作为在 V10 中编写函数的要求而提供给我的。任何想法如何使它在 V10 上工作

标签: ibm-cloud ibm-watson ibm-cloud-functions


【解决方案1】:

请参阅此处查看runtime environments available in IBM Cloud Functions。根据 Node.js 版本,有不同版本的 IBM Watson SDK。如文档中所述,Node.js 12 运行时具有更新的 SDK,具有您正在寻找的 IAM 身份验证功能。 Node.js 10 运行时具有 V4.x IBM Watson SDK。

因此,您需要use the old (documented) way of authenticating,或者升级到 Node.js 12 运行时。

如果您使用旧的用户名/密码身份验证并且只有一个 IAM API 密钥,请使用 iamapikey 作为用户名,使用 API 密钥作为密码。

【讨论】:

  • 我读过这个,但问题是旧的记录方式需要用户名和密码,而 Discovery 只给我们 apikey。
  • 只是想评论一下,您不仅限于 Cloud Functions 运行时提供的 NPM 包,只要您愿意设置像 Webpack 这样的构建系统来捆绑确切的您想要的模块到您部署的源代码文件中。从 Node.js 开发人员的角度来看,这很奇怪,因为我们习惯于能够在 package.json 中指定我们想要的包,然后运行 ​​npm install(或者,我们希望部署的云模式能够接受package.json 文件并下载我们想要的包),但它基于底层平台(OpenWhisk)。
猜你喜欢
  • 2018-12-23
  • 2019-09-01
  • 2021-04-23
  • 2019-04-02
  • 2015-09-01
  • 2019-03-23
  • 2021-08-09
  • 1970-01-01
  • 2020-07-05
相关资源
最近更新 更多