我正在开发一个项目,其中有一个 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); 之前执行。
现在我想知道事件是否会阻止代码?如果我必须在后台或发送回复后更新源,正确的方法是什么?将来我还想实现缓存,因此即使添加帖子,我也必须更新缓存,我也想在发送响应后或在后台执行此操作。
我正在尝试使用以下代码导出 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)