NODE.js и ORACLE, проблема с dbObject - PullRequest
0 голосов
/ 26 апреля 2020

У меня проблема с Oracle Массив в Node.js

    function simpleExecute(statement, binds = [], opts = {}) {
      return new Promise(async (resolve, reject) => {
        let conn;

        opts.outFormat = oracledb.OUT_FORMAT_OBJECT;
        opts.autoCommit = true;

        try {
            conn = await oracledb.getConnection();

            const result = await conn.execute(statement, binds, opts);
            console.log(result);
            resolve(result);
        } catch (err) {
            reject(err);
        } finally {
            if (conn) {
                // conn assignment worked, need to close
                try {
                    await conn.close();
                } catch (err) {
                    console.log(err);
                }
            }
        }
    });
  }

  module.exports.simpleExecute = simpleExecute;

В функции simpleExecute все работает хорошо. console.log отображает данные правильно

{
      board_id: 242,
      name: 'School at School',
      user_name: 'David',
      user_url: 'ej',
      background_regular: 'red',
      background_thumb: 'https://images.unsplash.com/photo-1558981806-ec527fa84c39?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&ixid=eyJhcHBfaWQiOjEyNTU3NX0',
      list_order: [USER_TEST.LIST_ORDER] [ 'WMCBQaBQtQ66' ],
      important: 0
    },

, но когда я передаю ответ обратно функции getAll

async function getAll(user) {
    user.user_id = parseInt(user.user_id, 10);

    const query = `SELECT
        BOARD_ID "board_id",
        NAME "name",
        t.background.user_name "user_name" , 
        t.background.user_url "user_url" , 
        t.background.background_regular "background_regular" , 
        t.background.background_thumb "background_thumb" ,  
        t.LIST_ORDER "list_order",
        IMPORTANT "important"
        from TO_DO_TABLE t
        WHERE USER_ID=:user_id`;

    const result = await database.simpleExecute(query, user);
    console.log(result);

    return result.rows;
}

Console.log отображает ошибку

Error: DPI-1010: not connected
    at DbObject._toPojo (C:\Users\David\Desktop\BD_2020\back-end\node_modules\oracledb\lib\dbObject.js:48:19)
    at Proxy.[nodejs.util.inspect.custom] (C:\Users\David\Desktop\BD_2020\back-end\node_modules\oracledb\lib\dbObject.js:63:54)
    at formatValue (internal/util/inspect.js:693:31)
    at formatProperty (internal/util/inspect.js:1558:11)
    at formatRaw (internal/util/inspect.js:933:9)
    at formatValue (internal/util/inspect.js:721:10)
    at formatProperty (internal/util/inspect.js:1558:11)
    at formatArray (internal/util/inspect.js:1380:17)
    at formatRaw (internal/util/inspect.js:930:14)
    at formatValue (internal/util/inspect.js:721:10)

Проблема в этом Oracle Массив

list_order: [USER_TEST.LIST_ORDER] [ 'WMCBQaBQtQ66' ]

Я понятия не имею, что происходит, почему я могу отображать этот Массив в одной функции, а не в другой

РЕДАКТИРОВАТЬ:

Если я не закрываю соединение после выполнения функции simpleExecute, все в порядке, но есть ли возможность извлечь эти данные и получить sh выше, несмотря на закрытие соединения

1 Ответ

0 голосов
/ 27 апреля 2020

Соединения должны оставаться открытыми, пока вы обращаетесь к базовому объекту. То же самое с LOB, если вы их транслируете. Это одна из причин, по которой мы отказались от использования встроенной функции simpleexecute в API-интерфейсе node-oracledb.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...