REST API 插入无法使用 node-oracledb

REST API insert is not working using node-oracledb

我第一次尝试用 node js 和 oracle 数据库制作 RESTFUL API

我在名为“EMPLOYEES”的数据库中创建了一个 table 并在其中添加了一些数据

我制作了我的后端文件,并尝试获取数据库中的信息并且成功了

但是当我尝试 POST 添加新员工时,我没有收到错误消息,并且该员工未添加到数据库中

当我尝试使用 POSTMAN 对其进行测试时,我得到的结果是一个像这样的空对象 {}

我知道我错过了什么

const express = require('express')
const oracledb = require('oracledb');
const bodyPerser=require("body-parser")
const app = express();
const port = 3000;
var password = 'mypassword';
app.use(bodyPerser.json());

async function selectAllEmployees(req, res) {
  try {
    connection = await oracledb.getConnection({
      user: "system",
      password: password,
      connectString: "localhost:1521/XE"
    });

    console.log('connected to database');
    // run query to get all employees
    result = await connection.execute(`SELECT * FROM EMPLOYEES`);

  } catch (err) {
    //send error message
    return res.send(err.message);
  } finally {
    if (connection) {
      try {
        // Always close connections
        await connection.close();
        console.log('close connection success');
      } catch (err) {
        console.error(err.message);
      }
    }
    if (result.rows.length == 0) {
      //query return zero employees
      return res.send('query send no rows');
    } else {
      //send all employees
      //return res.send(result.rows);
      console.log(JSON.stringify(result.rows));
      console.log(result.metaData[0].name);
      let list=[]
      result.rows.forEach(element => {
        let agent = {
          "ID": element[0],
          "EMPNAME": element[1],
          "EMPLASTNAME": element[2],
          "AGE":element[3]
        }
        list.push(agent)
      });
      return res.send(JSON.stringify(list));
      
    }

  }
}

//get /employess
app.get('/employees', function (req, res) {
  selectAllEmployees(req, res);
})

//////////////////post//////////////////////


app.post("/addNewEmployee", async (req, res) => {
   try {
    connection = await oracledb.getConnection({
      user: "system",
      password: password,
      connectString: "localhost:1521/XE"
    });
    console.log('connected to database');
    // I don't know what i'm missing here 
    result=connection.execute(`INSERT INTO EMPLOYEES  VALUES ('${req.body.ID}','${req.body.EMPNAME}','${req.body.EMPLASTNAME}','${req.body.AGE}')`);
    
res.send(result)
  } catch (err) {
    //send error message
    return res.send(err.message);
  } 
  
})

app.listen(port, () => console.log("nodeOracleRestApi app listening on port %s!", port))

查看 node-oracledb examples 并确保您掌握了基本技术,例如使用绑定变量。 (构建 INSERT 的方式对 SQL 注入安全攻击是开放的)。查看 webapp.js 如何使用连接池 - 如果不止一个人访问您的服务,您将需要它。

确保在插入后提交数据。

在您的 connection.execute() 之前添加一个 'await' 用于 INSERT,例如:

result = await connection.execute(`INSERT INTO EMPLOYEES VALUES (:id, :empname, :emplastname, :age)`,
    [req.body.ID, req.body.EMPNAME, req.body.EMPLASTNAME, req.body.AGE],
    {autoCommit: true}
);

进行一些调试,看看有什么问题。

避免使用 SYSTEM 进行测试。创建一个 'normal'(非特权)用户: https://blogs.oracle.com/sql/how-to-create-users-grant-them-privileges-and-remove-them-in-oracle-database

最后查看关于使用 node-oracledb 创建 REST 服务的系列文章:

https://blogs.oracle.com/oraclemagazine/build-rest-apis-for-nodejs-part-1

https://github.com/oracle/oracle-db-examples/tree/master/javascript/rest-api