【问题标题】:Express with socket.io emit - findOneAndUpdate使用 socket.io 发出的 Express - findOneAndUpdate
【发布时间】:2015-07-08 04:58:46
【问题描述】:

对于使用 express 的套接字 io 来说非常新,我正在使用 yo angular-express fullstack。

保存和删除一切正常,但是当涉及到 findOneAndUpdate 时,它似乎不再起作用了。有人可以帮忙吗?有没有办法可以在控制器内发出?

/**
 * Broadcast updates to client when the model changes
 */

'use strict';

var project = require('./project.model');

exports.register = function(socket) {
  project.schema.post('save', function (doc) {
    onSave(socket, doc);
  });
  project.schema.post('remove', function (doc) {
    onRemove(socket, doc);
  });
}

function onSave(socket, doc, cb) {
  socket.emit('project:save', doc);
}

function onRemove(socket, doc, cb) {
  socket.emit('project:remove', doc);
}

【问题讨论】:

    标签: express socket.io


    【解决方案1】:

    根据Mongoose Document,pre 和 post 中间件只挂钩初始化、验证、保存、删除。如果您查看 findByIdAndUpdate 函数的源代码,您会发现它在查询中完成了所有工作,这意味着它将绕过所有 pre 和 post 的保存中间件。 (它有自己的查询中间件)

    但是,您仍然可以通过将 findByIDAndUpdate 函数重写为使其工作

    Schema.findById(id, function(err, doc){
       // do some update on doc.
       doc.save(function(err){
           // all the additional works. 
       })
    })
    

    save函数会触发save中间件,其作用与findByIDAndUpdate相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-30
      • 2014-07-07
      • 2012-03-13
      • 2016-09-20
      • 1970-01-01
      • 2018-03-07
      • 2022-12-11
      • 2019-03-08
      相关资源
      最近更新 更多