Оставьте API поверх кэша зажигания, используя узел express - PullRequest
0 голосов
/ 11 февраля 2020

Мы пытаемся построить Rest API поверх кэша воспламенения, используя узел express.

При получении данных в курсоре мы сталкиваемся со следующими проблемами:

  1. Свойство cursor._values ​​всегда имеет только 1024 строки, хотя таблица имеет размер 100 000 строк.
  2. Свойство cursor._fieldnames не отображает имена полей, в результате чего мы создали массив со списком полей и создали список json объектов с использованием этого массива и обход каждой строки курсора. Значения с использованием функции карты.

Также, пожалуйста, дайте мне знать, есть ли способ прямого преобразования полей sql вывод запроса на JSON с использованием узла express.

Ниже приведен код, используемый для построения API.

const express=require('express');
const url=require('url');
//const routes=require('./igniteroute');
const querystring=require('querystring');
const bodyParser = require('body-parser');
const request=require('request');
const IgniteClient = require('apache-ignite-client');
const SqlFieldsQuery = IgniteClient.SqlFieldsQuery;
const IgniteClientConfiguration = IgniteClient.IgniteClientConfiguration;
const ENDPOINT='127.0.0.1';
const CACHE_NAME='ProductDetailsCache';
var _ = require('underscore');


const app=express();
app.use(bodyParser.json());

app.get('/productdetails',async function(req,res){


    const igniteClient =await new IgniteClient();

    try {


        await igniteClient.connect(new IgniteClientConfiguration(ENDPOINT));
        const cache = igniteClient.getCache('ProductDetailsCache');
        const queryparametre=await req.query;
        const page=await parseInt(req.query.page);
        const limit=10000;

        const startindex=(page-1)*limit;
        const endindex=page*limit;

        const count_input_query_params=Object.keys(queryparametre).length;

        if(count_input_query_params==1

           && queryparametre.hasOwnProperty("page")
          ){


        const queryProductDetails=new SqlFieldsQuery(`select field1,field2 from  ProductDetails

               `
            )
        ;

        const queryNAV=new SqlFieldsQuery(`select field1,field2,field3,field4
                         from  PIE.ProductNav

                            `
                         )
           ;


        const cursorProductDetails = await cache.query(queryProductDetails);
        const cursorNAV = await cache.query(queryNAV);

        const rowProductDetails =await  cursorProductDetails.getValue();
        const rowNAV =await  cursorNAV.getValue();

        const dataProductDetails=cursorProductDetails._values;
        //console.log(dataProductDetails);
        const dataNAV=cursorNAV._values;

        console.log(cursorProductDetails._values.length);

        var res_data_prddetails=[];

        var res_data_navdetails=[];

        console.log(dataProductDetails.length);

        console.log(dataNAV.length);


        var prdfields=["field1","field2"];

        var navfields=["field1","field2","field3","field4"]

        await dataProductDetails.map(function(arr){
                                 var prdobj={};
                                 prdfields.forEach((k,v)=> prdobj[k]=arr[v]);
                                 res_data_prddetails.push(prdobj);


                                    }


          );




        await dataNAV.map(function(arr){
            var navobj={};
            navfields.forEach((k,v)=> navobj[k]=arr[v]);
            res_data_navdetails.push(navobj);
            //console.log("NAV:"+Object.values(navobj)+Object.keys(navobj));

               }

        );

        console.log(res_data_prddetails.length);



        nested_results=[];

        await  res_data_prddetails.map(function(arr){

            var tempobj=[arr];
            var navfiltereddata=_.where(res_data_navdetails,

                {   field1:arr.field1,
                    field2:arr.field2
                }
        );




        tempobj[0].NAV=navfiltereddata;

        nested_results.push(tempobj[0]);

         }
        );

        //console.log("Without sort"+nested_results);

        const nested_results_Sorted=_.chain(nested_results).sortBy('field1').sortBy('field2').
         value();

      // console.log("With sort"+nested_results_Sorted);




         const results_paginated=nested_results_Sorted.slice(startindex,endindex);
         //console.log("results"+nested_results_Sorted);
         const rec_cnt=nested_results_Sorted.length;
         const prev_page=page-1;
         const next_page=page+1;

         //console.log(cursor);

         const results={};


        if(page!=1 && endindex<rec_cnt){
            results.previous="/productdetails?page="+prev_page;
            results.next="/productdetails?page="+next_page;

        }

        else if (endindex>=rec_cnt){
            results.next="/productdetails?page="+next_page;
        }
        else {
            results.previous="/productdetails?page="+prev_page;

        }

        results.totreccount=rec_cnt;
        results.reccountperpage=limit;


        results.Product=results_paginated;   

         if (results_paginated.length==0){
         res.status(404).json({"Message":"No Data exists"});
         }
         else{
            res.status(200).json(results);
         } ;

        }
          else 
          {
                res.status(400).json({
                    "Message":"Invalid no of query parametres.Needed page as query params "
                });
          }


          }




catch (err) {
    res.json({
        "Message ": err.message});
}
finally {

    igniteClient.disconnect();


}

});

//listen for requests
app.listen(process.env.port||4000,
    function(){
        console.log('now listensing to port '+4000);
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...