Метод Get - Почему я не могу вернуть значения из представления Oracle? - PullRequest
0 голосов
/ 11 марта 2019

Я искал хороший пример Node + Express + Oracle.Мне нужно прочитать значения из представления Oracle, чтобы создать ответ на операцию GET.

В большинстве примеров не используется «Express» (мой выбор фреймворка) и просто ведется журнал информации базы данных.,Вот некоторые из лучших, которые я нашел: от Express , от Oracle 1 , от Oracle 2

Вот одинЯ предпочел основывать свой код на .Мне это нравится, потому что он включает в себя экспресс и фактические манипуляции с данными ответов.К сожалению, это все еще не работает для меня.И мне интересно, в чем проблема.

Я думаю Я понимаю асинхронную природу языка JavaScript (то есть: обратные вызовы), и я начинаю подозревать, что моя проблема может быть связана с: Глупое имя переменной snafu, Моя версия Oracle (12c) или тот факт, что источником является представление (реплицировано из другой схемы).

Я пробовал следующий код во многих других формах (включая асинхронные функции), а также пытался переключиться с узла 10 на 11 ... без изменений.

Любая помощь приветствовалась бы.

На данный момент код "работает" в том смысле, чтоданные строк из базы данных выводятся на экран, но ответ в Postman (мой инструмент тестирования) пуст, без http-кода ошибки ... точно так же, как соединение было бы разорвано перед ответом.

Обратите внимание назакомментированный, неуместный код ответа, который возвращает ответ, если он не закомментирован (и затем вызывает сбой программы, поскольку заголовок записывается дважды).

Вот код.Он основан на этом проекте / файле (и упрощенно):

    var express = require('express');
    var oracledb = require('oracledb');

    var app = express();

    var connAttrs = {
        "user": "user",
        "password": "pass",
        "connectString": "some_host/SCHEMANAME"
    }

    // Http Method: GET
    // URI        : /myObj
    app.get('/myObj', function (req, res) {
        "use strict";

        oracledb.getConnection(connAttrs, function (err, connection) {
            if (err) {
                // Error connecting to DB
                res.set('Content-Type', 'application/json');
                res.status(500).send(JSON.stringify({
                    status: 500,
                    message: "Error connecting to DB",
                    detailed_message: err.message
                }));
                return;
            }

            // THIS works if uncommented. This is obviously the wrong place to put this.
            //res.contentType('application/json').status(200);
            //res.send("Test.1.2");

            connection.execute("SELECT * FROM SCHEMA.SOMEVIEW", {}, {
                outFormat: oracledb.OBJECT // Return the result as Object
            }, function (err, result) {
                if (err) {
                    res.set('Content-Type', 'application/json');
                    res.status(500).send(JSON.stringify({
                        status: 500,
                        message: "Error getting the user profile",
                        detailed_message: err.message
                    }));
                } else {
                    //log first row... THIS WORKS !
                    console.log(result.rows[0]);

                    //This does not work, like if "res" could not be touched here !!!
                    res.contentType('application/json').status(200);
                    res.send(JSON.stringify(result.rows[0]));
                }
                // Release the connection
                connection.release(
                    function (err) {
                        if (err) {
                            console.error(err.message);
                        } else {
                            console.log("GET /myObj: Connection released");
                        }
                    });
            });
        });
    });
    var server = app.listen(3000, function () {
        "use strict";
        var host = server.address().address,
            port = server.address().port;
        console.log(' Server is listening at http://%s:%s', host, port);
    });

Вот представление консоли:

{ field1: 'some data',
  field2: 'some more data' }
GET /myObj : Connection released

А вот поведениев почтальоне: enter image description here

1 Ответ

0 голосов
/ 11 марта 2019

ARGGG! Это был простой тайм-аут! Почтальон ДЕЛАЕТ упомянуть это как возможность (см. Изображение), но я бы хотел, чтобы программа заставляла его высвечивать яркие буквы !!!

Закрытие вопроса. Извините за беспокойство.

Code 18

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