Get 方法 - 为什么我不能 return 来自 Oracle 视图的值?

Get method - Why can't I return the values from an Oracle view?

我搜索了一个Node+Express+Oracle的好例子。我需要从 Oracle 视图读取值以创建对 GET 操作的响应。

大多数示例不使用"Express"(我选择的框架)并且只是记录数据库信息。以下是我发现的一些最好的:from Express, from Oracle 1, from Oracle 2

这里是the one I preferred to base my code on。我喜欢它,因为它包括 Express 和响应数据的实际操作。可悲的是,它仍然对我不起作用。我想知道问题是什么。

认为 我了解 JavaScript 语言的异步性质(即:回调),我开始怀疑我的问题可能与以下问题有关:A愚蠢的变量名称 snafu,我的 Oracle (12c) 版本或源是视图(从另一个模式复制)的事实。

我在许多其他形式(包括异步函数)中尝试了以下代码,并且还尝试从节点 10 切换到 11...没有变化。

欢迎任何帮助。

截至目前,代码 "works",在某种意义上,来自数据库的行数据打印在屏幕上,但 Postman(我的测试工具)中的响应是空的,没有 http 错误代码...就像在回复之前连接会被切断一样。

注意注释错误的响应代码,如果未注释,returns 响应(然后由于 header 被写入两次而使程序崩溃)。

这是代码。 它基于此 project/file(并简化):

    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

这是邮递员的行为:

呜呜呜!这是一个简单的超时!邮递员 确实 提到了它的可能性(见图),但我希望该程序让它闪烁明亮的字母 !!!

关闭问题。抱歉打扰了。