Node.js在另一个事件中更新save事件上的db对象

时间:2017-05-09 15:02:37

标签: node.js events mongoose

在将更改保存到其他对象时创建/更新对象的最方便方法是什么?想象一下,我们有一个模型客户端,我们在保存时发出事件。

clientSchema.post('save', function (client) {
    process.emit('clientUpdate', client);
});

然后我们可以订阅该事件,如:

process.on('clientUpdate', function(client) {
  //LOGIC GOES HERE
});

我们假设我们现在想要更新ClientProjection。你将在哪里找到监听器以及如何为mongoDB(mongoose)实现更新逻辑 - 使用model,by dao等?

1 个答案:

答案 0 :(得分:0)

我相信你可以避免发出另一个事件,只是在保存后的钩子中进行更新。例如:

next

在后保存挂钩中,如果要调用异步函数,则需要添加Asynchronous Post Hooks作为第二个参数,并在异步操作完成时在回调中调用它。请参阅mongoose Middleware docs

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import org.apache.poi.hssf.usermodel.HSSFObjectData; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.DocumentEntry; import org.apache.poi.poifs.filesystem.Entry; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.util.IOUtils; public class TestEmbedded { public static void main(String[] args) throws Exception { String path = "DummyParent.xls"; File file = new File(path); POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(file)); HSSFWorkbook wb = new HSSFWorkbook(fs.getRoot(), true); for (HSSFObjectData obj : wb.getAllEmbeddedObjects()) { System.out.println(obj.getDirectory()+"***************HSSFObject data value************"+obj.getOLE2ClassName()); String oleName = obj.getOLE2ClassName(); System.out.println("Has directory Entry node"+obj.hasDirectoryEntry()); DirectoryNode dn = (DirectoryNode)obj.getDirectory(); Iterator<Entry> ab = dn.getEntries(); System.out.println("The entries in the directory node are"+dn.getEntries()+"And also the count"+dn.getEntryCount()); if(oleName.contains("Worksheet")){ HSSFWorkbook hssfWorkbook = new HSSFWorkbook(dn,fs,false); int number = hssfWorkbook.getNumberOfSheets(); System.out.println("The number of sheets in the Embedded excel - xls"+number); } } } } 部分