【发布时间】:2023-03-02 23:55:01
【问题描述】:
这是我的代码:
downloadFile(file_id) {
var mongoose = require('mongoose');
var Grid = require('gridfs-stream');
var fs = require('fs');
mongoose.connect(config.db, {useNewUrlParser: true},).catch(e => console.log(e));
var conn = mongoose.connection;
Grid.mongo = mongoose.mongo;
var gfs = Grid(conn.db);
console.log('downloadfile', file_id);
var read_stream = gfs.createReadStream({_id: file_id});
let file = [];
read_stream.on('data', function (chunk) {
file.push(chunk);
});
read_stream.on('error', e => {
console.log(e);
});
return read_stream.on('end', function () {
console.log('file', file); // This logs the file buffer
return file;
});
}
这就是我尝试使用它的方式:
Account.findById(req.params._id)
.then(async account => {
const file = await functions.downloadFile(account.employer.logo);
console.log(file); // This logs the readStream data
res.render('users/employer/booth', {
title: 'Employer Booth',
user: req.user,
postings: postings,
employer: account.employer,
event: event,
logo: logo,
});
});
我猜想在回调中获取下载的文件很容易,但我怎样才能将这个文件传回,让代码执行等待呢?
这是记录文件的样子file [ <Buffer 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 fa 00 00 00 fa 08 06 00 00 00 88 ec 5a 3d 00 00 00 01 73 52 47 42 00 ae ce 1c e9 00 00 20 00 ... > ]
所以总结一下。现在,代码不会等待。它记录 readStream 本身,然后记录文件数据。如何让它等待流结束并将文件返回到我的路由器?
【问题讨论】:
标签: javascript node.js asynchronous stream