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
这是邮递员的行为:
呜呜呜!这是一个简单的超时!邮递员 确实 提到了它的可能性(见图),但我希望该程序让它闪烁明亮的字母 !!!
关闭问题。抱歉打扰了。
我搜索了一个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
这是邮递员的行为:
呜呜呜!这是一个简单的超时!邮递员 确实 提到了它的可能性(见图),但我希望该程序让它闪烁明亮的字母 !!!
关闭问题。抱歉打扰了。