Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 有没有办法在Mongoose中创建更新后触发器或事件?_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Node.js 有没有办法在Mongoose中创建更新后触发器或事件?

Node.js 有没有办法在Mongoose中创建更新后触发器或事件?,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我想知道是否有办法创建类似于插入后触发器或异步事件之类的东西,定期查看日志表,然后将更改应用到另一个数据库 我发现了一些关于使用中间件或使用vanilla js函数的东西,但由于不同的Nommenclations或可能不清楚的文档,我认为这对我不起作用。 如果有人能澄清在更新中使用post钩子或在函数中使用承诺,那将是非常棒的 基本上,我想要的是一个触发器或一个侦听订单详细信息表的事件,我有两种类型的订单:第一种类型中的当前订单和已交付订单。一个名为deliveryDate的字段在更新时为空,并

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

我发现了一些关于使用中间件或使用vanilla js函数的东西,但由于不同的Nommenclations或可能不清楚的文档,我认为这对我不起作用。 如果有人能澄清在更新中使用post钩子或在函数中使用承诺,那将是非常棒的

基本上,我想要的是一个触发器或一个侦听订单详细信息表的事件,我有两种类型的订单:第一种类型中的当前订单和已交付订单。一个名为deliveryDate的字段在更新时为空,并且在字段中输入了一个值。它应该捕获该字段并将其插入另一个数据库

我有一个名为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} 
我可以在导出。更新功能下创建一个post钩子吗?就像将钩子放入一个函数中一样,如果我这样做,我将如何执行它?如果我只将它分配给默认post路由,这会不会与现有路由冲突?谢谢

根据&您可以在更新后添加一个钩子,如下所示:

schema.post("update", function(doc) {
  console.log('Updated');
});
你可以用这个

中间件中有两种类型:

  • 在进行操作之前

    schema.pre('update', function(next) {
    
        // do something
    
        next();   //dont forget next();
    
    });
    
    schema.post('update', function(next) {
    
        // do something
    
        next();   //dont forget next();
    
    });
    
  • 职位
  • 操作完成后

    schema.pre('update', function(next) {
    
        // do something
    
        next();   //dont forget next();
    
    });
    
    schema.post('update', function(next) {
    
        // do something
    
        next();   //dont forget next();
    
    });
    
    注:

    您需要将此中间件写入要在其上执行此操作的集合文件中

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


    使用Mongoose中间件:阅读问题我阅读了文档,但它们不清楚也不详尽大多数用例,所以
    “更新”
    是我创建的更新功能还是内置的(如果是我创建的)功能?更新是预定义的,什么是“更新”和下一步在这里表示。如果我听起来有点重复,请原谅,但我想彻底了解此“更新”是对您的收藏执行的操作。如果您在更新操作中定义了一个中间件,则会调用该中间件。还支持其他操作,如“保存”、“删除”、“删除一个”、“fineOneAndUpdate”等,请阅读文档。“下一步”应该在您想在中间件中做的事情结束时调用,您希望将控制权传递给下一个操作。就像在“更新”上的前置中间件中一样,如果在中间件中不调用next,则不会发生更新。