Get方法-为什么我不能从Oracle视图返回值?

时间:2019-03-11 16:59:31

标签: node.js oracle express node-oracledb

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

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

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

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

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

任何帮助都将受到欢迎。

从现在开始,代码“有效”,即数据库中的行数据打印在屏幕上,但是Postman(我的测试工具)中的响应为空,没有http错误代码...只是就像在回复之前就已经切断了连接。

请注意注释错误,放置错误的响应代码,如果未注释该代码,则会返回一个响应(由于标头被写入两次,因此会使程序崩溃)。

这是代码。 它基于以下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

这是邮递员的行为: enter image description here

1 个答案:

答案 0 :(得分:0)

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

结束问题。抱歉打扰了。

Code 18