Я искал хороший пример 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
А вот поведениев почтальоне: