Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ibm cloud 如何在以下组装步骤中访问invoke response对象变量_Ibm Cloud_Ibm Datapower_Apiconnect - Fatal编程技术网

Ibm cloud 如何在以下组装步骤中访问invoke response对象变量

Ibm cloud 如何在以下组装步骤中访问invoke response对象变量,ibm-cloud,ibm-datapower,apiconnect,Ibm Cloud,Ibm Datapower,Apiconnect,我的API Connect API的程序集包含两个调用。第一种是调用内部路由API以获取一些路由信息。此路由API的响应不应传递给第二个调用 如果我没有在路由API的调用中配置“response object variable”,那么原始请求主体将被覆盖,第二个API将从路由API获取结果作为请求主体。如果我在路由调用中指定了一个“response object variable”,我将无法在以下步骤中访问该变量的内容(json) 我如何解决这个问题 Thx 4帮助。不依赖于读取请求对象,您可以

我的API Connect API的程序集包含两个调用。第一种是调用内部路由API以获取一些路由信息。此路由API的响应不应传递给第二个调用

如果我没有在路由API的调用中配置“response object variable”,那么原始请求主体将被覆盖,第二个API将从路由API获取结果作为请求主体。如果我在路由调用中指定了一个“response object variable”,我将无法在以下步骤中访问该变量的内容(json)

我如何解决这个问题


Thx 4帮助。

不依赖于读取请求对象,您可以稍后在流中读取配置的“响应对象变量”。例如,如果您的第一次调用将响应对象变量设置为“resp1”,那么您可以稍后在流中使用“$(resp1.body)”访问JSON负载。使用此技术将允许您将每个调用的响应存储在单独的对象中,从而避免覆盖问题。这些响应对象变量可以像流中的任何其他上下文变量一样读取

有关更多信息,请查看知识中心中的以下链接:

调用策略:

上下文变量:
我不明白这部分:

[…]”如果我在路由中指定了“响应对象变量” 调用时,我无法访问 以下步骤。”[……]

为什么不能在以下步骤中访问此变量的内容


保存请求的副本。。。 。。。你收到的。我要做的是始终将调用中接收的数据的副本保存到已处理的变量,而不是原始请求

在您的GatewayScript中,尝试以下操作:

let objRequest = apim.getvariable("request");
let body = null;
在这里,我建议您将主体(如果是json)更改为标准js对象

if(objRequest && objRequest.hasOwnProperty("body")){
    try{
        body = JSON.parse(objRequest.body);
    }catch(e){
        body = objRequest.body;
    }
}
在将整个对象保存为全局变量之前,请记住对其进行字符串化。是存储它的唯一方法(因为您只能在此类变量中存储字符串值)

检索请求的副本。。。 …保存在全局变量中后,您可以通过以下方式从任何其他网关脚本获取它:

let objRequest = JSON.parse(apim.getvariable("objRequest"));
请注意不要将现有名称分配给apim.setvariable(名称、值),因为如果使用“request”作为名称而不是“objRequest”(或其他),将替换原始的request元素,我们不希望发生这种情况


如果您需要设置或检索状态。代码。。。 …您可以通过以下方式完成:

let statusCode = objRequest.body.status.code;

好的,谢谢。这对身体很有效。但是现在我遇到了status.code的问题。第一次调用/响应的status.code似乎被发送回API调用方。$(resp1.status.code)也应该工作吗?或者如何访问调用响应的status.code?
let statusCode = objRequest.body.status.code;