From ca64cbd6b4e016e12795966d8a122abc281e21c1 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sat, 5 Apr 2025 13:58:42 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-917=20-=20=D0=9F=D1=83?= =?UTF-8?q?=D0=B1=D0=BB=D0=B8=D0=BA=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B0=D0=BD?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8?= =?UTF-8?q?=D1=85=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20-=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20PG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/olapp.js | 74 +++++++++++++++++++----------------------------- 1 file changed, 29 insertions(+), 45 deletions(-) diff --git a/modules/olapp.js b/modules/olapp.js index 110859b..8bf0b0d 100644 --- a/modules/olapp.js +++ b/modules/olapp.js @@ -9,7 +9,6 @@ const { ServerError } = require("./../core/server_errors"); //Типовая ошибка const { SERR_APP_SERVER_BEFORE, SERR_DB_SERVER } = require("./../core/constants"); //Общесистемные константы -const oracledb = require("oracledb"); //Работа с СУБД Oracle //------------ // Тело модуля @@ -21,52 +20,37 @@ const before = async prms => { if (prms.options.qs && prms.options.qs.STOKEN && prms.options.qs.NPREVIEW && prms.options.qs.NACTUAL_CHECK) { //И есть подключение к БД if (prms.dbConn.bConnected) { - let pooledConnection; - try { - //Считаем курсор с данными публикации - pooledConnection = await prms.dbConn.connection.getConnection(); - let res = await pooledConnection.execute( - "BEGIN PKG_EXS_EXT_OLAPP_RUN.EXTRACT(STOKEN => :STOKEN, NPREVIEW => :NPREVIEW, NACTUAL_CHECK => :NACTUAL_CHECK, RCDATA => :RCDATA); END;", - { - STOKEN: prms.options.qs.STOKEN, - NPREVIEW: prms.options.qs.NPREVIEW, - NACTUAL_CHECK: prms.options.qs.NACTUAL_CHECK, - RCDATA: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } - }, - { outFormat: oracledb.OBJECT } - ); - //Установим заголовок ответа и начнём выдачу данных - prms.res.set({ - "content-type": "application/json;charset=utf-8" - }); - prms.res.write("["); - //Обходим курсор и выдаём порционно ответ - const rs = res.outBinds.RCDATA; - let cnt = 1; - let row; - while ((row = await rs.getRow())) { - prms.res.write(Buffer.from(`${cnt > 1 ? "," : ""}${JSON.stringify(row)}`)); - cnt++; + let olappExtractData = await prms.dbConn.executeStored({ + sName: "PKG_EXS_EXT_OLAPP_RUN.EXTRACT", + inPrms: { + STOKEN: prms.options.qs.STOKEN, + NPREVIEW: prms.options.qs.NPREVIEW, + NACTUAL_CHECK: prms.options.qs.NACTUAL_CHECK + }, + outPrms: { + RCDATA: prms.dbConn.connector.DT_CURSOR } - //Завершаем передачу - prms.res.write("]"); - prms.res.end(); - await rs.close(); - //Дальше обрабатывать не надо - return { - bStopPropagation: true - }; - } catch (e) { - throw new ServerError(SERR_DB_SERVER, e.message); - } finally { - if (pooledConnection) { - try { - await pooledConnection.close(); - } catch (e) { - throw new ServerError(SERR_DB_SERVER, e.message); - } + }); + //Установим заголовок ответа и начнём выдачу данных + prms.res.set({ + "content-type": "application/json;charset=utf-8" + }); + prms.res.write("["); + if (olappExtractData) + if (olappExtractData.RCDATA) { + let cnt = 1; + olappExtractData.RCDATA.map(row => { + prms.res.write(Buffer.from(`${cnt > 1 ? "," : ""}${JSON.stringify(row)}`)); + cnt++; + }); } - } + //Завершаем передачу + prms.res.write("]"); + prms.res.end(); + //Дальше обрабатывать не надо + return { + bStopPropagation: true + }; } else { throw new ServerError(SERR_DB_SERVER, "Нет подключения к БД"); }