小编Shr*_*ant的帖子

Eventemitter代码是否阻塞

我正在开发一个项目,其中有一个 Feed 页面,其中显示所有用户的所有类型的帖子。输入具体列表页面和帖子详细信息页面。

页面 - 1. 提要 2. 列表(特定于类型) 3. 详细信息(帖子的详细信息)

所以我有以下 Mongo 集合 - 1. Feed 2. type1 post 3. type2 post 4. type3...

现在,当用户发布新帖子时,我将其保存到相应的集合中,让我们说“type1 post”并向浏览器返回成功。但我也想用相同的数据更新我的“Feed”集合。我不希望在发送响应之前完成此操作。因为这会增加用户的等待时间。因此我使用了事件。这是我的代码 -

const emitter = new event.EventEmitter();

function savePost(){
    //  Code to save data to Mongo collection

    emitter.emit('addToFeeds', data);
    console.log('emit done');

    return res.json(data);
}

emitter.on('addToFeeds', function(data){
    // code to save data to Feeds collection
    console.log('emitter msg - ', data);
});
Run Code Online (Sandbox Code Playgroud)

现在,当我检查 console.log 输出时,它首先显示“emitter msg -”,然后显示“emit done”。这就是为什么我假设 emitter.on 代码在 res.json(data); 之前执行。

现在我想知道事件是否会阻止代码?如果我必须在后台或发送回复后更新源,正确的方法是什么?将来我还想实现缓存,因此即使添加帖子,我也必须更新缓存,我也想在发送响应后或在后台执行此操作。

node.js eventemitter

7
推荐指数
1
解决办法
6110
查看次数

Mongoose 流数据并将数据导出到 CSV 文件

我正在尝试使用以下代码导出 CSV 文件,但它不起作用。我假设我的数据会很大,因此 Mongoose 游标将是选项。我还注意到我提到了 500 的“batchSize”,它仍然一次吐出 1 个。

module.exports.export2CSV = (req, res)=>{
  var limit       = 250000;
  var filename    = 'export.csv';
  var query       = User.find();
  if (limit){query.limit(limit);} 
  var headers = {
      'Content-Type': 'text/csv',
      'Content-disposition': 'attachment;filename=' + filename
  }
  // res.writeHead(200, headers)
  res.setHeader('Content-disposition', 'attachment; filename='+filename);
  res.set('Content-Type', 'text/csv');


  var stream = User.aggregate().cursor({ batchSize: 500 }).exec().stream();
  stream.on('data', function (doc) {
    // do whatever you want with the data
  res.write(doc);
}).on('error', function (err) {
  // handle errors
  res.end();
}).on('end', function () {
  // close …
Run Code Online (Sandbox Code Playgroud)

csv mongoose mongodb

2
推荐指数
1
解决办法
4710
查看次数

标签 统计

csv ×1

eventemitter ×1

mongodb ×1

mongoose ×1

node.js ×1