当前位置: 首页 > 知识库问答 >
问题:

在IBM Cloud中使用Node.js在web操作中使用axios

尤夕
2023-03-14

我一直试图获得一个简单的web操作来向API发出一个经过身份验证的get请求(我已经从示例代码中删除了实际的url和秘密)。

我已经在本地成功地运行了这一点,但是当我测试web动作时,它只是在记录“调用Axios”之后死亡。

它不会报告错误,我尝试实现一个承诺,认为线程在api响应之前就结束了,但没有效果。有什么线索吗?

    /**
      *
      * main() will be run when you invoke this action
      *
      * @param Cloud Functions actions accept a single parameter, which must be a JSON object.
      *
      * @return The output of this action, which must be a JSON object.
      *
      */
    function main(params) {
    getData().then(function(result) {
        console.log("In the THEN of original method call");
    return "hello";
        
    })
    .catch(function(err) {
        console.log("In catch of original method call");
    });
    
        
    }
    
     function getData(){
                    const crypto = require('crypto');
                    const axios = require('axios');
                    const secretKey = "ENTER KEY HERE";  
                    const apiId = 99999;  
                    const apiBaseUrl = "https://acmewebservice.com";
                    const apiPath = "/customer/9";
                    const apiFullPath = apiBaseUrl + apiPath;       
                    const sharedSecretHash = crypto.createHash('sha256').update(secretKey).digest('hex');
             
                    console.log("In getData");
                    var authToken = apiId + ":" + sharedSecretHash;
            
            return new Promise((resolve, reject) => {
                    console.log("Calling axios");
                    axios.get(apiFullPath, {
                        headers: {
                            'Authentication': authToken
                            }
                        }).then(response => {
                            console.log("Did this work?")
                            var x = JSON.stringify(response.data);
                            console.log(x);
                            resolve(response);
                      })
                        .catch(error => {
                            console.log("In Catch")
                        console.log(error);
                        reject(error);
                    });
            });

共有1个答案

司空实
2023-03-14

您不需要重新包装axios调用,这已经是一个承诺了。

需要return来使引擎有效地等待异步调用的结果。

js prettyprint-override">
     function getData(){
                    const crypto = require('crypto');
                    const axios = require('axios');
                    const secretKey = "ENTER KEY HERE";  
                    const apiId = 99999;  
                    const apiBaseUrl = "https://acmewebservice.com";
                    const apiPath = "/customer/9";
                    const apiFullPath = apiBaseUrl + apiPath;       
                    const sharedSecretHash = crypto.createHash('sha256').update(secretKey).digest('hex');
             
                    console.log("In getData");
                    var authToken = apiId + ":" + sharedSecretHash;
            
                    console.log("Calling axios");
                    return axios.get(apiFullPath, {
                        headers: {
                            'Authentication': authToken
                            }
                        }).then(response => {
                            console.log("Did this work?")
                            var x = JSON.stringify(response.data);
                            console.log(x);
                            return response;
                      })
                        .catch(error => {
                        console.log("In Catch")
                        console.log(error);

                    });

 类似资料:
  • 问题内容: 因此,我正在编写一个小的辅助方法,使用将该数字转换为有效的货币格式()。在Chrome中使用时,一切正常,但是在Node.js中使用时,似乎完全坏了。 例: 如果在浏览器中运行此命令,它将显示。如果您在Node.js REPL或应用程序中运行此代码段,则它将作为字符串返回。 猜猜这是Node.js的错误吗?您可以在这里进行周围的工作吗? 问题答案: 基于此问题,似乎决定将具有国际化的n

  • Mulesoft新手,对调用Web服务的SOAP消费者有疑问。假设有一个带有一些操作的web服务。例如,WS具有“createUser”、“validateUser”、“isAccountActive”等操作。假设“createUser”要求我传递“用户名”、“名字”、“姓氏”、“地址”、“城市”,“zipCode”等,而“validateUser”仅要求“userName”,而“isAccoun

  • 问题内容: 我的数据库中有大量的文档,我想知道如何浏览所有文档并更新它们,每个文档具有不同的值。 问题答案: 答案取决于您使用的驱动程序。我所知道的所有MongoDB驱动程序都以一种或另一种方式实现。 这里有些例子: mongojs 僧 猫鼬 在回调内部更新文档 在回调内部更新文档的唯一问题是您不知道何时更新所有文档。 要解决此问题,您应该使用一些异步控制流解决方案。以下是一些选项: 异步的 承诺

  • 问题内容: 我一直在学习有关node.js和模块的信息,似乎无法让Underscore库正常工作……似乎我第一次使用Underscore中的函数时,它会覆盖_对象,其结果为我的函数调用。有人知道发生了什么吗?例如,这是来自node.js REPL的会话: 当我自己制作Javascript文件并将其导入时,它们似乎工作正常。Underscore库也许有一些特别之处? 问题答案: Node REPL使

  • 问题内容: 我很难理解net模块的几个Node.js示例中显示的功能。 任何人都可以提供有关其工作原理以及为什么需要这样做的解释吗? 问题答案: 该功能从可读流中读取可用的数据,并将其写入目标可写流。 文档中的示例是回显服务器,它是发送接收到的信息的服务器。该对象同时实现了可读和可写的流接口,因此它会将接收到的所有数据写回套接字。 这等效于使用使用事件侦听器的方法:

  • 问题内容: 在我的项目中,我需要使用分页查询数据库,并为用户提供基于当前搜索结果进行查询的功能。像极限之类的东西,我找不到与Node.js一起使用的东西。我的后端是mysql,我正在编写rest api。 问题答案: 您可以尝试类似的操作(假设您使用Express 4.x)。 使用GET参数(此处的page是所需的页面结果数,而npp是每页的结果数)。 在此示例中,查询结果设置在响应有效负载的字段