Mik*_* B. 2 orm database-connection node.js knex.js node-mysql2
没有任何人有一个动手既DB-库经验-knex主场迎战mysql2?
经过一些谷歌搜索(例如在NPMCompare),我仍然很想知道,根据实际经验,这两种选择的优缺点是什么?
到目前为止,我清楚地看到使用knexover的唯一真正优势mysql2是它对 MSSQL、MySQL、PostgreSQL、SQLite3 和 Oracle 的普遍支持,而后者仅支持 MySQL,但由于目前我只关注 MySQL, thisknex的功能似乎不太相关。
我会考虑的参数:
Util.promisify包装、ESM/MJS支持);我在我的主要项目中使用 knex,我认为您正在尝试将苹果与橙子进行比较,因为 Knex 是一个查询构建器,它下划线使用 (mysql2) 作为传输库(在使用 MySql 的情况下)。
我在 Knex 中看到的好处是:
由于#3 在我看来是一个如此大的优势,最好证明它:
认为你有 2 个端点
/users/list- 假设返回用户列表 ( {id, name})/users/:id- 假设返回具有相同结构的单个用户。你可以像这样实现它。
async function getAllUsers() {
return db('users').columns('id', 'name'); //think that this can consist of many joins
}
async function getUserById(userId) {
return getAllUsers().where('id', userId);
}
Run Code Online (Sandbox Code Playgroud)
看看如何getUserById重用相同的查询(可能真的很复杂),并且只是“添加”它所需的限制。
性能方面,我不认为这种抽象有很大的成本,(我还没有注意到任何性能问题)
我不确定你所说的稳定性是什么,但 Knex 有一个非常酷的 TS 支持,它可以使你的查询强类型化。
interface User {
id: number;
name: string;
}
const users = await db<User>('users').columns('id', 'name'); // it will autocomplete the columns names & users will be of type User[] automatically.
Run Code Online (Sandbox Code Playgroud)
结合使用@typed-code/schemats从数据库自动生成这些数据库类型,它使工作和重构变得更好。
从 ES6 开始,Knex 默认支持 Promise 和回调,因此您可以选择适合您的任何东西。
我正在使用的其他很酷的功能是在案例之间自动转换,我的数据库有一个蛇形大小写样式作为表和列名称,但在我的节点中,我使用驼峰式大小写,使用knex-stringcase插件。
Migrations,允许您定义如何使用代码构建/升级您的架构,这可以帮助您从 CI 自动更新您的生产架构。
Mysql2 是数据库之上的低级驱动程序。
| 归档时间: |
|
| 查看次数: |
1608 次 |
| 最近记录: |