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
我第一次尝试用 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