Узлу JS REST API после запроса не удалось разорвать соединение - PullRequest
0 голосов
/ 20 сентября 2018
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var oracledb = require('oracledb');
const morgan = require('morgan');

app.use(morgan("combined"));

app.use(bodyParser.json());

 app.post("/user", function (req, res){
     console.log("Posting data into table :");
     const connection = oracledb.getConnection(
        {
          user          : "SYSTEM",
          password      : "************",
          connectString : "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DESKTOP-*****)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)))"
        })
        .then(function(conn) {
          return conn.execute(
            `INSERT INTO table1 (department_id, department_name) VALUES` [req.body.department_id, req.body.department_name]
          )
            .then(function(result) {
              console.log(result.rows);
              res.json(result.rows);
              return conn.close();
            })
            .catch(function(err) {
              console.error(err);
              return conn.close();
            });
        })
        .catch(function(err) {
          console.error(err);
        });
    connection.release(
    function (err) {
        if (err) {
            console.error(err.message);
        } else {
            console.log("POST /user_profiles : Connection released");
        }
    });
});
 app.listen(3000, ()=>{
     console.log("Connected . . . ")
 })

Я не могу разорвать соединение в программе POST, написанной выше, ошибка отображается следующим образом:

Ошибка: NJS-006: недопустимый тип для параметра 1 в объекте.assert (C: \ Node \ NodePrograms \ node_modules \ oracledb \ lib \ util.js: 80: 11) в Connection.execute (C: \ Node \ NodePrograms \ node_modules \ oracledb \ lib \ connection.js: 129: 12) вC: \ Node \ NodePrograms \ node_modules \ oracledb \ lib \ util.js: 116: 16 в новом Promise () в Connection.execute (C: \ Node \ NodePrograms \ node_modules \ oracledb \ lib \ util.js: 104: 14) в C: \ Node \ NodePrograms \ postdb.js: 20: 23

Я использую ARC Chrome для публикации данных. Показывает 500 Internal Server Error and <pre>TypeError: connection.release is not a function Я использую Node JS и Oracle DB.

1 Ответ

0 голосов
/ 20 сентября 2018

Кажется, здесь есть две разные ошибки.Давайте сначала посмотрим на connection.release is not a function.

oracledb.getConnection - это асинхронная функция.Он возвращает undefined, если последний параметр является функцией обратного вызова или обещание, если последний параметр не является функцией обратного вызова.В любом случае он не возвращает соединение напрямую.

Поскольку вы не передали функцию обратного вызова в качестве последнего параметра, он возвращает обещание.В обещании нет метода release, поэтому вы получаете ошибку при вызове connection.release.Однако вы уже закрываете соединение с помощью conn.close в другом пути кода.

Что касается NJS-006: invalid type for parameter 1 at Object.assert, это связано с вашим вызовом conn.execute (как указано в стеке ошибок).Вот что у вас есть:

conn.execute(
  `INSERT INTO table1 (department_id, department_name) VALUES` [req.body.department_id, req.body.department_name]
)

Обратите внимание, что вы передаете одно значение (выражение) для выполнения, а не два параметра, которые вы, возможно, намеревались (пропуская запятую).Литерал шаблона и массив могут привести к странным значениям:

console.log(`string` [1]); // "t"
console.log(`string` [{}]); // undefined

Скорее всего, вы передаете undefined в conn.execute.Это один из тех "Ват?"моменты.:) https://www.destroyallsoftware.com/talks/wat

После того, как вы это исправите, вам также потребуется обновить оператор вставки, в котором в настоящее время отсутствуют переменные связывания.Смотрите этот пост (часть серии по API REST) ​​для некоторых указателей: https://jsao.io/2018/04/creating-a-rest-api-handling-post-put-and-delete-requests/

...