Mongoose 中 pre 和 post 中间件的使用
Mongoose 是一个非常受欢迎的 mongodb 驱动库。与其它 mongodb 的驱动不同,Mongoose 提供了一种更加面向对象的方法来操作 mongodb 数据库。Mongoose 中 pre 和 post 中间件是对数据库操作时的钩子函数。在操作前和操作后添加 pre 和 post 中间件可以在操作之前或之后,对数据进行一些特定的处理,例如数据校验、数据加工等一系列操作。
一、pre 中间件
在 Mongoose 中,使用 pre 钩子可以在执行操作前进行预处理。
1.1 文档前置中间件
document middleware 是作用在 Mongoose 的 Model 实例身上,更具体的,在执行 save、update 和 findOneAndUpdate 等方法的时候,document middleware 才会被执行。
实例如下:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------ - ---------------- ----- ---------- - --- -------- ----- ------- ---- ------ --- ---------------------- -------- ------ - ------------------- ------- ---------- ---------- ------- --- ----- ---- - ---------------------- ------------ ----- ----- - --- ------ ----- -------- ---- -- --- ---------------- ----- -- - -- ----- ----------------- ----------------- ---------- ------ ---
执行结果:
Before save: Flynn 26 Save success: { _id: 5f17b3ede1c95d61897a569f, name: 'Flynn', age: 26, __v: 0 }
1.2 query 前置中间件
query middleware 是针对 model 的查询方法(find、findOne、update、remove 等)进行预处理。
下面的例子展示了在执行查询之前,我们可以对查询条件进行修改:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------ - ---------------- ----- ---------- - --- -------- ----- ------- ---- ------ --- ---------------------- -------- ------ - ----------------- ---------- ------- --- ----- ---- - ---------------------- ------------ --------------- ------ -- - -- ----- ----------------- ----------------- ---------- ------- ---
执行结果:
Find success: [ { _id: 5f17b3ede1c95d61897a569f, name: 'Flynn', age: 26, __v: 0 } ]
二、post 中间件
在 Mongoose 中,使用 post 钩子可以在执行操作后进行后续处理。
2.1 文档后置中间件
document middleware 是作用在 Mongoose 的 Model 实例身上,更具体的,在执行 save、update 和 findOneAndUpdate 等方法的时候,document middleware 才会被执行。
实例如下:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------ - ---------------- ----- ---------- - --- -------- ----- ------- ---- ------ --- ----------------------- -------- ----- ----- - ----------------- ---------- ----- ------- --- ----- ---- - ---------------------- ------------ ----- ----- - --- ------ ----- -------- ---- -- --- ---------------- ----- -- - -- ----- ----------------- ----------------- ---------- ------ ---
执行结果:
Save success: { _id: 5f17b3ede1c95d61897a569f, name: 'Flynn', age: 26, __v: 0 } Save success: { _id: 5f17b3ede1c95d61897a569f, name: 'Flynn', age: 26, __v: 0 }
2.2 query 后置中间件
query middleware 是针对 model 的查询方法(find、findOne、update、remove 等)进行预处理。
下面的例子展示了在执行查询之后,我们可以对查询结果进行修改:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------ - ---------------- ----- ---------- - --- -------- ----- ------- ---- ------ --- ----------------------- -------- ------ ----- - ------------------ -- - ------- -- --- --- ------- --- ----- ---- - ---------------------- ------------ --------------- ------ -- - -- ----- ----------------- ----------------- ---------- ------- ---
执行结果:
Find success: [ { _id: 5f17b3ede1c95d61897a569f, name: 'Flynn', age: 36, __v: 0 } ]
总结
在 Mongoose 中,使用 pre 和 post 中间件是非常方便的。可以对 query、save、update、findOneAndUpdate 等方法进行预处理和后续处理。这不仅能提高代码的重用性和清晰度,也能够减少出错的概率。在实际开发中,我们可以使用 pre 和 post 中间件来校验数据、数据加工等等,让我们的工作更加高效。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6480751448841e9894fe7df8