我正在IBM的平台上尝试一些基本的API Connect教程(使用环回在本地运行)并且在早期就完全陷入困境。
我已经构建了一个基本的API服务,其中包含一些内存数据和setter / getter函数。然后,我构建了一个单独的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);
我没有获得额外的JSON参数(“平台”),而是在调用服务时,我得到的是500错误。我猜我在做一些根本错误的事情,但是所有的文档都暗示这些是正确的变量名称。
答案 0 :(得分:0)
您需要以某种确定的格式获取上下文,然后使用此函数执行逻辑。例如,如果您的消息在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
答案 1 :(得分:0)
您的message.body为空,例如在您的网关/ javascript策略之前放置一个调用/代理策略。
答案 2 :(得分:0)
您无法访问 json.platform ,但此时 json 变量为 json类型。如果您的 json 对象缺少该属性,您确定可以将属性添加到 json类型变量中吗?我的意思是:如果先将 json类型的 parse 变量 json 放入普通对象,然后添加新的属性,最后再次 stringify 更改为 json类型以进行正文分配?
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