atdatabases 开源项目教程
1. 项目介绍
atdatabases
是一个用于 TypeScript 的库集合,旨在防止 SQL 注入攻击,并提供对多种数据库的类型安全访问。该项目通过使用 SQL 标签模板字面量,确保查询的安全性,并且所有 API 都设计为支持 Promise。atdatabases
的每个数据库驱动都作为单独的模块发布到 npm,因此用户只需安装他们需要的模块。
2. 项目快速启动
安装
首先,你需要安装 atdatabases
的核心库以及你想要使用的数据库驱动。例如,如果你使用的是 PostgreSQL,你可以这样安装:
npm install @databases/pg
连接数据库
以下是一个简单的示例,展示如何连接到 PostgreSQL 数据库并执行一个查询:
import createConnectionPool, {sql} from '@databases/pg';
// 创建连接池
const db = createConnectionPool();
async function getUsers() {
// 执行查询
const users = await db.query(sql`SELECT * FROM users`);
console.log(users);
}
// 调用函数
getUsers().catch((err) => {
console.error(err);
process.exit(1);
});
关闭连接
在应用程序结束时,确保关闭数据库连接:
db.dispose().catch((err) => {
console.error(err);
process.exit(1);
});
3. 应用案例和最佳实践
防止 SQL 注入
atdatabases
通过强制使用 SQL 标签模板字面量来防止 SQL 注入攻击。例如:
const userID = 1;
const query = sql`SELECT * FROM users WHERE id = ${userID}`;
使用事务
在某些情况下,你可能需要使用事务来确保数据的一致性:
async function transferMoney(fromID, toID, amount) {
await db.tx(async (tx) => {
await tx.query(sql`UPDATE accounts SET balance = balance - ${amount} WHERE id = ${fromID}`);
await tx.query(sql`UPDATE accounts SET balance = balance + ${amount} WHERE id = ${toID}`);
});
}
4. 典型生态项目
@databases/pg
用于 PostgreSQL 的 TypeScript 客户端,提供了连接池、事务管理等功能。
@databases/mysql
用于 MySQL 的 TypeScript 客户端,同样提供了防止 SQL 注入的功能。
@databases/sqlite
用于 SQLite 的 TypeScript 客户端,适用于嵌入式数据库场景。
@databases/websql
用于 WebSQL 的 TypeScript 客户端,适用于浏览器环境。
通过这些模块,atdatabases
提供了对多种数据库的统一访问方式,确保了代码的安全性和可维护性。