如何解决在后端使用 node-oracledb 管理来自前端的请求
我正在编写一个连接到数据库的新方法,运行 SQL 查询并在每次从前端发出请求时关闭该连接。对于我要运行的每个查询,一次又一次地建立和关闭与数据库的连接。这会影响性能吗?这是正确的方法还是有更好的方法?
app.post('/register',(req,res) =>{
registerDb().then(resp => {
res.json({"message" : resp})})
.catch(err => {
console.log(err);
})
})
app.post('/signin',res) => {
checkAuth(req.body).then(response => {
res.send(response);
})
.catch(err => {
console.log(err);
});
})
app.listen(4000);
async function registerDb() {
let conn;
try {
conn = await oracledb.getConnection(config)
let result = await conn.execute(
`INSERT INTO "User" VALUES (name,email,id,password,age)`,);
console.log("Rows inserted: " + result.rowsAffected); // 1
console.log("ROWID of new row: " + result.lastRowid);
return result.rowsAffected;
} catch (err) {
console.log('Ouch!',err)
return err.message;
} finally {
if (conn) { // conn assignment worked,need to close
await conn.close()
}
}
}
async function checkAuth(data) {
let conn;
try {
conn = await oracledb.getConnection(config)
let result = await conn.execute(
`Select name
from "User"
where email = :email and password = :password`,{
email : {val: data.email},password: {val: data.password}
}
);
return result.rows;
} catch (err) {
console.log('Ouch!',need to close
await conn.close()
}
}
}
解决方法
打开和关闭与数据库的连接会影响性能。需要在 DB 主机上启动一个进程,必须分配和初始化内存。而在连接关闭时则相反。由于这些是新连接,因此它们无法重用某些缓存数据来执行语句。
来自 node-oracledb pooling documentation:
当应用程序在短时间内使用大量连接时,Oracle 建议使用连接池以提高效率。
查看该手册,并查看 webapp.js 之类的示例。
确保为打开多个连接的应用增加 UV_THREADPOOL_MAX。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。