【发布时间】:2018-11-15 01:06:09
【问题描述】:
我的实时数据库中有超过 20,000 个文档。我需要流式传输它们,但我什至不确定如何开始使用它。这就是我想要的目标
sendEmail.get('/:types/:message', cors(), async (req, res, next) => {
console.log(5);
const types = JSON.parse(req.params.types);
console.log('types', types);
let recipients = [];
let mails = [];
if (types.includes('students')) {
console.log(1);
const tmpUsers = await admin.database().ref('Users').orderByChild('student').equalTo(true).once('value').then(r => r.val()).catch(e => console.log(e));
recipients = recipients.concat(tmpUsers);
}
if (types.includes('solvers')) {
console.log(2);
let tmpUsers = await admin.database().ref('Users').orderByChild('userType').equalTo('person').once('value').then(r => r.val()).catch(e => console.log(e));
tmpUsers = tmpUsers.concat(arrayFromObject(await admin.database().ref('Users').orderByChild('userType').equalTo('company').once('value').then(r => r.val()).catch(e => console.log(e))));
recipients = recipients.concat(tmpUsers);
}
});
但是这段代码导致我的服务器内存不足。有人在我之前的问题中建议了流,但尽管我很喜欢这个想法,但我不知道如何实际进行流。我知道它应该是这样的:
const fs = require('fs');
const readStream = fs.createReadStream('path goes here');
const data = [];
readStream.on('data', chunk => {
data.push(chunk);
})
readStream.on('end', () => {
console.log(data);
res.end(data);
});
但是我到底如何将 firebase 查询传递到路径中?
我试过这个,但它说Argument type Promise is not assignable to parameter type PathLike,这是有道理的,但我该如何绕过它呢?
const users = fs.createReadStream(admin.database().ref('News').once('value').then(r => r.val()))
总结一下:如何从 Firebase 实时数据库流式传输数据?
编辑: 怎么是复制品?这是两个完全不同的问题。起始代码是一样的,但我问的解决方法完全不同
【问题讨论】:
-
这是怎么复制的?这是两个完全不同的问题。起始代码是一样的,但我问的解决方法完全不同
标签: javascript node.js firebase firebase-realtime-database stream