我第一次尝试用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))
发布于 2021-08-07 01:04:14
复习node-oracledb examples,并确保您掌握了基本的技术,例如使用绑定变量。(构建插入的方式容易受到SQL注入安全攻击)。看看webapp.js是如何使用连接池的-如果您有多个人访问您的服务,您将需要连接池。
确保在插入后提交数据。
在用于插入的connection.execute()之前添加一个'await‘,类似于:
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
https://stackoverflow.com/questions/68688191
复制相似问题