包含基本Javascript

时间:2017-11-14 08:36:50

标签: javascript json ibm-cloud apiconnect

我正在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错误。我猜我在做一些根本错误的事情,但是所有的文档都暗示这些是正确的变量名称。

3 个答案:

答案 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