У нас есть 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);
});