【问题标题】:REST API insert is not working using node-oracledbREST API 插入无法使用 node-oracledb
【发布时间】:2021-10-11 17:43:02
【问题描述】:

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

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

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

但是当我尝试通过 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))

【问题讨论】:

    标签: oracle express oracle11g node-oracledb


    【解决方案1】:

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

    确保在插入后提交数据。

    在您的 connection.execute() 之前添加一个“等待”以进行 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 进行测试。创建一个“普通”(非特权)用户: 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

    【讨论】:

    • 感谢您的宝贵时间和帮助,问题已解决,再次感谢您
    猜你喜欢
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    相关资源
    最近更新 更多