在前端开发中,使用数据库是一个不可忽视的部分,在 Node.js 中使用 Sequelize 是非常常见的方式,但是 Sequelize 自带的特性并不完善,@atlas.js/sequelize 包就是针对 Sequelize 的一个扩展。
安装
你可以通过 npm 来安装 @atlas.js/sequelize 包,运行以下命令即可:
npm install @atlas.js/sequelize
基本使用
使用 @atlas.js/sequelize 和 Sequelize 类似,只需要将 Sequelize 替换成 AtlasSequelize 即可。以下是一个简单的示例:
-- -------------------- ---- ------- ----- - -------------- - - ------------------------------- ----- --------- - --- ---------------------- ----------- ----------- - -------- -------- ----- ------------ --- ----- ---- - ------------------------ - ----- ----------------- --- ------------------------ -- - ------ ------------- ----- ------- --- ------------ -- - --------------------------- ---
更强的模型 API
@atlas.js/sequelize 在模型方面提供了更强大的可扩展 API,你可以使用定义模型的“插件”来扩展你的模型。
基本例子
下面是一个简单的插件,它为“User”模型添加了一个从“findLatest”方法中获得最新用户数据的实例方法。
-- -------------------- ---- ------- ----- ---------- - ----- -------- -- - ----- --- ---------- --------- -- - ------ ----- --- - ----- ---------------------- ------ ---------- -------- -- ----- ---- ----------------- --- ------ ----------- ------- -- ----------------- - --------- -- -- - --------------- - ----------- ---------------------------- ------ -------- -- - --------------------- ---- ------------------- --- ------------------------------- - ---------- - ----- ------- - - ---- ------- -- ------ ------------------- ------------------------ -- ---
在这个例子中,我们做的是:
- 添加了自定义方法 findLatest
- 添加了一个添加钩子,当创建用户时会输出一条消息
- 添加了一个实例方法,生成 API token(注意:JWT 示意使用)
现在,我们可以在 User 模型实例上执行以下操作:
const user = await User.findById(1); const latest = await user.findLatest(); console.log(latest);
也可以使用如下方式创建用户:
const user = await User.create({ email: 'foo@example.com' }); const token = user.generateApiToken(); console.log(token);
插件的高级例子
插件无处不在,在 @atlas.js/sequelize 中使用插件可以轻松地为模型添加更多功能。下面是一个自定义 finder 的示例,以及一个自定义模型缓存的示例。
自定义 finder:
-- -------------------- ---- ------- ----- ------------------- - ----- -------- ---- - ----- ------ - ----- ---------------------- ------ - ---- ----------------- ----- -- - ----- --- -- ------- - ----- --- ----------- ----- --- --------- - ------ ---------------- - ------------ ----- --- -- ----------------- - --------- -- -- - ------------------------ - -------------------- ----------------------- - ------ - ------- -------- -- --- ---
在这里,我们添加了一个自定义查找器(findWithCustomQuery),它将使用 SQL 查询而不是 Sequelize 代码执行查询,该方法返回的结果与使用内置函数查找器相同(findById)。我们还为 User 模型添加了一个“范围”,使在查询活跃用户的情况下更加简单。
自定义模型缓存:
-- -------------------- ---- ------- ----- ----- - --- ------ ----- --------- - ----- -------- ---- - ----- ------ - -------------- -- -------- - ------ ------- - ----- ---- - ----- ------------------ -- ------- - ----- --- --------- ---- ---- ----- -- -------- - ------------- ------ ------ ----- -- ----------------- - --------- -- -- - -------------- - ---------- --------------------------- ---- -- - ------------------ ------ --- ---
在这种情况下,我们添加了一个简单的缓存。我们在 User 的构造函数中定义了一个用于缓存的简单 Map,如果查询需要的对象不存在于该缓存中,我们会执行数据库查找并将其保存在内存缓存中,以备将来使用。我们通过添加 afterCreate 钩子来保持缓存的最新状态。
结论
@atlas.js/sequelize 扩展了 Sequelize 的功能,更容易地扩展模型 API 并添加缓存等功能。尽管还没有成为必须使用的 npm 包,但是许多项目中使用它,这使得我们建议您尝试一下。
如果您对 Sequelize 或 @atlas.js/sequelize 有任何问题,可以去官方文档进行查看。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/110044