How to use variable in json path

Not applicable

Hi All,

I have set a context variable in proxy preflow using a javascript. In node js I am access that variable.

I am preparing a final json response in node.js. I am getting target response and capturing it in a variable in nodjs. And finally I am preparing response by mapping fields from target response to one final json object and sending that json object as final response to Client.

I am mapping lijke below for example:

finalResponse.YearOfBrth = targetResponse.My_KR_Year_Of_Birth;

hete KR is country code,so instead of using the entire name as My_KR_Year_Of_Birth I want to map it as My_{country}_Year_Of_Birth where country is from context variable.

How can I achieve this so that I can generalise the mapping for different country codes as the remaining part of the field name would be same for other countries.

Regards

Ravi

0 1 2,921
1 REPLY 1

This seems like mostly a nodejs question.

I suppose you would dynamically determine the lookup key in the hash, depending on an inbound context variable. It might look like this:

// index.js
// ------------------------------------------------------------------


var apigee = require('apigee-access');
var express = require('express');
var request = require('request');
var sprintf = require("sprintf-js").sprintf;
var moment = require('moment-timezone');
var app = express();
var x = 0;


app.get('/yob', function(req, resp) {
  var requestOptions = {
        timeout : 66000, // in ms
        uri: 'https://dchiesa-first-project.appspot.com/yob',
        method: 'get',
        json: true,
        headers: {
          'accept' : 'application/json',
          'user-agent' : 'requestjs node-response-shape'
        }
      };
  var countryCode = apigee.getVariable(req, 'country_code') + '';
  var putativeKey = sprintf("My_%s_Year_Of_Birth", countryCode);


  request(requestOptions, function(e, httpResp, body) {
    var actualKey = (body[putativeKey]) ? putativeKey : "My_KR_Year_Of_Birth";
    var finalResponse = {
          now : moment().tz('GMT').format(),
          countryCode : countryCode,
          actualKey : actualKey,
          YearOfBirth : body[actualKey]
        };
    resp.header('content-type','application/json')
      .status(200)
      .send(finalResponse);
  });
});


// default behavior
app.all(/^\/.*/, function(request, response) {
  response.header('Content-Type', 'application/json')
    .status(404)
    .send('{ "message" : "This is not the server you\'re looking for." }\n');
});


app.listen(3000, function () { console.log('Example app listening on port 3000!'); });

And in the request flow, you need to make sure your context variable ("country_code") is set to something reasonable.