const oracledb = require('oracledb'); const express = require('express'); const app = express(); const port = 3000; // 连接数据库 async function connect() { try { await oracledb.createPool({ user: 'USERNAME', password: 'PASSWORD', connectString: 'HOST:PORT/SID' }); console.log('Connected to Oracle database'); } catch (err) { console.error(err); } } // 查询数据库 async function query(sql, params) { let connection; let result; try { connection = await oracledb.getConnection(); result = await connection.execute(sql, params); } catch (err) { console.error(err); } finally { if (connection) { try { await connection.close(); } catch (err) { console.error(err); } } } return result; } // 定义接口 app.get('/api/query', async (req, res) => { const sql = 'SELECT * FROM TABLE_NAME'; const result = await query(sql, []); res.send(result); }); // 启动服务 app.listen(port, () => { console.log(`Server is running on port ${port}`); connect(); }); 如何优化
时间: 2024-03-01 08:53:17 浏览: 124
以下是一些优化建议:
1. 使用连接池:在每次查询时都创建一个新的连接是不必要的,使用连接池可以提高性能并减少资源消耗。
2. 错误处理:在错误处理方面,应该更具体地报告错误,而不是简单地输出错误信息。这将有助于诊断问题并更快地解决它们。
3. 路由简化:可以使用路由模块来简化路由设置和管理。
4. SQL 注入防范:可以使用参数化查询来防止 SQL 注入攻击。
下面是一个经过优化的代码:
```javascript
const oracledb = require('oracledb');
const express = require('express');
const app = express();
const port = 3000;
(async function() {
try {
await oracledb.createPool({
user: 'USERNAME',
password: 'PASSWORD',
connectString: 'HOST:PORT/SID'
});
console.log('Connected to Oracle database');
} catch (err) {
console.error(err.message);
process.exit(1);
}
})();
app.get('/api/query', async (req, res) => {
const sql = 'SELECT * FROM TABLE_NAME WHERE ID = :id';
const id = parseInt(req.query.id);
if (isNaN(id)) {
res.status(400).send('Invalid ID');
return;
}
const result = await oracledb.getConnection().execute(sql, [id]);
res.send(result);
});
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
```
在以上代码中,我们使用 `async function` 自执行函数来创建连接池。在查询数据库时,我们使用参数化查询来防止 SQL 注入攻击,并通过解析查询参数来验证输入。最后,我们使用 `res.status` 方法来设置响应状态码并返回错误信息。
阅读全文