首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用node-oracledb时REST API插入不起作用

使用node-oracledb时REST API插入不起作用
EN

Stack Overflow用户
提问于 2021-08-06 22:53:41
回答 1查看 196关注 0票数 1

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

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

我创建了我的后端文件,并尝试在数据库中获取信息,它成功地工作了

但是,当我尝试使用POST来添加新员工时,我没有得到错误消息,而且该员工也没有添加到数据库中

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

我知道我错过了什么

代码语言:javascript
复制
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))

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-07 01:04:14

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

确保在插入后提交数据。

在用于插入的connection.execute()之前添加一个'await‘,类似于:

代码语言:javascript
复制
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}
);

做一些调试,看看有什么不起作用。

避免使用系统进行测试。创建一个“普通”(非特权)用户: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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68688191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档