【问题标题】:is there a way to create After update triggers or Events in Mongoose?有没有办法在 Mongoose 中创建更新后触发器或事件?
【发布时间】:2019-09-17 18:27:28
【问题描述】:

我想知道是否有办法创建类似 After insert 触发器或异步事件,定期查看日志表,然后将更改应用到另一个数据库。

我发现了一些关于使用中间件或使用 vanilla js 函数的信息,但由于不同的命名法或者可能是不清楚的文档,我认为这对我不起作用。 如果有人能澄清更新时使用 post 挂钩或函数中的承诺,那就太好了。

基本上我想要的是一个触发器或一个监听订单详细信息表的事件,我有两种类型的订单:当前订单和第一种类型的交付它应该捕获它并将其插入另一个数据库的字段。

我有一个名为 update 的函数,每次路由 '/myApp' 收到 POST 请求时都会执行这里是一个离我想做的不远的例子 这是路线:

 module.exports = (app) => {
 const Something= require('../controllers/something.controller.js')
 // Create a new something
 app.post('/Myapp', Something.update);}

这里是控制器:

const Something = require('../models/something.model.js');
const SomethingLog = require('../models/something.log.model.js');
exports.update = (req, res) => {//function body} 

我可以在exports.update 函数下创建一个 post 钩子吗,就像将钩子放在一个函数中一样,如果我这样做,我将如何执行它,如果我只是将它分配给默认的 post 路由不会那么冲突与现有路线?谢谢

【问题讨论】:

标签: node.js mongodb express mongoose


【解决方案1】:

您可以为此使用mongoose middlewares

中间件有两种:

手术前

schema.pre('update', function(next) {

    // do something

    next();   //dont forget next();

});
  1. 发布

操作后

schema.post('update', function(next) {

    // do something

    next();   //dont forget next();

});

注意:

您需要将此中间件写入您希望对其执行此操作的 collection 文件中。

其次,“更新”是对您的集合执行的操作,如果“pre”中间件将在集合更新之前执行,并且当中间件调用 next() 时,它会继续执行更新操作,如果是“post”更新操作后执行中间件

【讨论】:

  • 什么是“更新”和下一个代表这里的借口,如果我听起来有点重复,但我想彻底了解这一点
  • 'update' 是对您的集合执行的操作。如果你在更新操作上定义了一个中间件,这个中间件就会被调用。
  • 还支持其他操作,如“save”、“remove”、“deleteOne”、“fineOneAndUpdate”等,请阅读文档。
  • "next" 应该在你想在中间件中做的事情结束时调用,并且你想将控制权传递给下一个操作。
  • 就像在“update”的pre中间件中一样,如果没有在中间件中调用next,则更新不会发生。
【解决方案2】:

根据this & this 你可以像这样在更新后添加一个钩子:

schema.post("update", function(doc) {
  console.log('Updated');
});

【讨论】:

  • 好吧,"update" 是我创建的更新功能或内置的东西,如果它是我创建的,那将是强大的
  • 更新是预定义的
猜你喜欢
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 2023-03-23
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多