Ошибка при извлечении полей даты из кеша зажигания с использованием узла express - PullRequest
1 голос
/ 20 февраля 2020

У нас есть Oracle Таблица, для которой соответствующий кеш / таблица создается в ignite и загружается с использованием Cache JDB C POJO Store. Поверх этого кэша API-интерфейс Rest создается с использованием узла express.

. Мы извлекаем данные из кэша с помощью запроса полей sql, а используемый язык программирования - node js. Мы можем выбрать все поля, кроме полей даты, и когда мы пытаемся выбрать поля даты, мы получаем следующую ошибку после выполнения оператора

const data = await cursorProductDetails.getAll();

Ошибка: введите код типа -2 не поддерживается
Java Тип данных для этого поля: java. sql .Date

В случае, если я приведу поле даты как varchar в sql полях По запросу эта ошибка не встречается. Даже я не сталкивался с этой ошибкой при извлечении данных с использованием Java и Python. Может кто-нибудь, пожалуйста, дайте мне знать, как решить эту проблему, не выполняя приведение типа varchar, а также причину, по которой я получаю эту ошибку при использовании только узла express.

Ниже приведен полный код, разработанный для сборки. остальные-api.

enter code here
const express=require('express');
const url=require('url');
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='PieProductDetailsLoadCache';
var _ = require('underscore');



const app=express();

app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json());

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


    const igniteClient =await new IgniteClient();

    try {

        //await res.setHeader('Content-Type', 'application/json');
        await igniteClient.connect(new IgniteClientConfiguration(ENDPOINT));
        const cache = igniteClient.getCache('PieProductDetailsLoadCache');
        const queryparametre=await req.query;
        const page=await parseInt(req.query.page);
        const limit=5000;

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

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


        if(count_input_query_params==2

           && queryparametre.hasOwnProperty("page")
           && queryparametre.hasOwnProperty("countrycode") &&
           req.accepts('application/json')
          ){


        const queryProductDetails=new SqlFieldsQuery(`select * from  PieProductDetails where countrycode=? `
            ).setArgs(queryparametre.countrycode)
        ;

        const queryPerformance=new SqlFieldsQuery(`select * from  PIE.PieProductPerformance where countrycode=? `
                         ).setArgs(queryparametre.countrycode)
        ;

        queryProductDetails.setIncludeFieldNames(true);
        queryPerformance.setIncludeFieldNames(true);


        const cursorProductDetails = await cache.query(queryProductDetails);
        const cursorPerformance = await cache.query(queryPerformance);


        const dataProductDetails =await  cursorProductDetails.getAll();

        const dataPerformance =await  cursorPerformance.getAll();

        var prdfields=cursorProductDetails.getFieldNames();

        var perffields=cursorPerformance.getFieldNames();

        var res_data_prddetails=[];

        var res_data_perfdetails=[];

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


                                    }


          );

        await dataPerformance.map(function(arr){
            //var navobj={};
            //navfields.forEach((k,v)=> navobj[k]=arr[v]);
            var perfobj=_.object(perffields,arr)
            res_data_perfdetails.push(perfobj);


               }

        );

        nested_results=[];

        await  res_data_prddetails.map(function(arr){

            var tempobj=[arr];
            var perffiltereddata=_.where(res_data_perfdetails,

                {   productid:arr.productid


                }
            )
        ;

        tempobj[0].Performance=perffiltereddata;

        nested_results.push(tempobj[0]);

         }
        );

        const nested_results_Sorted=_.chain(nested_results).sortBy('productid')

         const results_paginated=nested_results_Sorted.slice(startindex,endindex);

         const rec_cnt=nested_results_Sorted.length;
         const prev_page=page-1;
         const next_page=page+1;



         const results={};

         if(page!=1){

             results.previous="/productdetails?page="+prev_page;

         }


        if(endindex<rec_cnt){

            results.next="/productdetails?page="+next_page;

        }



        results.totreccount=rec_cnt;
        results.reccountperpage=results_paginated.length;
        results.pagelimit=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 if (!req.accepts('application/json')){
            res.status(400).json({
                "Message":"Application content should be application/json"
            });

        }
          else 
          {
                res.status(400).json({
                    "Message":"Invalid  query parametres.Accepts page and countrycode 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);
    });
...