在后端使用 node-oracledb 管理来自前端的请求
Managing requests from Front-End with node-oracledb in backend
我正在编写一个连接到数据库的新方法,运行s SQL 每次从前端发出请求时查询并关闭该连接。对于我想要 运行 的每个查询,都会一次又一次地建立和关闭数据库连接。这会影响性能吗?这是正确的方法还是有更好的方法?
app.post('/register', (req, res) =>{
registerDb().then(resp => {
res.json({"message" : resp})})
.catch(err => {
console.log(err);
})
})
app.post('/signin', (req, 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!', err)
return err.message;
} finally {
if (conn) { // conn assignment worked, need to close
await conn.close()
}
}
}
打开和关闭与数据库的连接会影响性能。需要在数据库主机上启动一个进程,必须分配和初始化内存。而在连接关闭时则相反。由于这些是新连接,因此它们无法重用某些缓存数据来执行语句。
来自node-oracledb pooling documentation:
When applications use a lot of connections for short periods, Oracle recommends using a connection pool for efficiency.
查看该手册,并查看 webapp.js.
等示例
确保为打开多个连接的应用增加 UV_THREADPOOL_MAX。
我正在编写一个连接到数据库的新方法,运行s SQL 每次从前端发出请求时查询并关闭该连接。对于我想要 运行 的每个查询,都会一次又一次地建立和关闭数据库连接。这会影响性能吗?这是正确的方法还是有更好的方法?
app.post('/register', (req, res) =>{
registerDb().then(resp => {
res.json({"message" : resp})})
.catch(err => {
console.log(err);
})
})
app.post('/signin', (req, 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!', err)
return err.message;
} finally {
if (conn) { // conn assignment worked, need to close
await conn.close()
}
}
}
打开和关闭与数据库的连接会影响性能。需要在数据库主机上启动一个进程,必须分配和初始化内存。而在连接关闭时则相反。由于这些是新连接,因此它们无法重用某些缓存数据来执行语句。
来自node-oracledb pooling documentation:
When applications use a lot of connections for short periods, Oracle recommends using a connection pool for efficiency.
查看该手册,并查看 webapp.js.
等示例确保为打开多个连接的应用增加 UV_THREADPOOL_MAX。