【问题标题】:API Connect - 500 error when including basic JavascriptAPI Connect - 包含基本 Javascript 时出现 500 错误
【发布时间】:2017-11-14 08:36:49
【问题描述】:

我正在 IBM 平台上尝试一些基本的 API Connect 教程(使用环回在本地运行)并且在早期完全陷入困境。

我用一些内存数据和 setter / getter 函数构建了一个基本的 API 服务。然后,我构建了一个单独的 API,它接受两个 GET 参数并使用我的一个 getter 函数来执行基于两个条件的搜索。当我运行它时,我成功地得到了以下 JSON 对象的响应:

[{"itemId":1,"charge":9,"itemSize":2,"id":2}]

然后我尝试添加一个修改响应数据的服务器逻辑 - 此时,我只是尝试添加一个额外的字段。我在 Assemble 视图中添加了一个 Javascript 组件,并包含以下代码(取自教程),我认为应该修改 API 返回的消息正文,同时仍然通过它:

//APIC: get the payload
var json = apim.getvariable('message.body');
//console.error("json %s", JSON.stringify(json));

//same: code to inject new attribute 
json.platform = 'Powered by IBM API Connect';

//APIC: set the payload
//message.body = json;
apim.setvariable('message.body', json);

调用服务时,我得到的只是 500 错误,而不是额外的 JSON 参数(“平台”)。我猜我做错了什么,但所有文档都建议使用这些是正确的变量名。

【问题讨论】:

    标签: javascript json ibm-cloud apiconnect


    【解决方案1】:

    您无法访问 json.platform,但此时 json 变量是 json 类型。如果您的 json 对象缺少该属性,您确定可以将属性添加到 json 类型 变量吗?我的意思是:如果你首先解析 json类型json变量到一个普通对象,然后添加新的属性,最后 stringifyjson 类型 再次用于正文分配目的?

    var json = JSON.parse(apim.getvariable('message.body')); //convert to normal object
    
    json.platform = 'Powered by IBM API Connect'; //add new property
    
    apim.setvariable('message.body', JSON.stringify(json)); //convert to json again before setting as body value
    

    【讨论】:

      【解决方案2】:

      您需要以某种确定的格式获取上下文,并在此函数中执行您的逻辑。例如,如果您的消息是 json 格式,您需要这样做:

      apim.readInputAsJSON(function (error, json) {
      if (error)
      {
          // handle error
          apim.error('MyError', 500, 'Internal Error', 'Some error message');
      }
      else
      {
          //APIC: get the payload
          var json = apim.getvariable('message.body');
          //console.error("json %s", JSON.stringify(json));
          if(json){
              //same: code to inject new attribute 
              json.platform = 'Powered by IBM API Connect';
      
              //APIC: set the payload
              //message.body = json;
              apim.setvariable('message.body', json);
          }
      }
      });
      

      参考: IBM Reference

      【讨论】:

        【解决方案3】:

        您的 message.body 为空,例如,在您的网关/javascript 策略之前放置一个调用/代理策略。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-05
          • 2018-11-27
          • 2021-05-16
          • 1970-01-01
          • 1970-01-01
          • 2018-05-24
          相关资源
          最近更新 更多