Javascript 不断获得;“未定义”;在GridFS中将readStream转换为字符串时
我正在开发一个网站,该网站将图像存储在MongoDB GridFS数据库中,然后可以向用户显示所选图像之一。Javascript 不断获得;“未定义”;在GridFS中将readStream转换为字符串时,javascript,node.js,mongodb,http,gridfs,Javascript,Node.js,Mongodb,Http,Gridfs,我正在开发一个网站,该网站将图像存储在MongoDB GridFS数据库中,然后可以向用户显示所选图像之一。 上载部分已经在工作,但我在图像的下载部分遇到了问题,因为每当我尝试将readStream从数据库转换为字符串时,我的控制台中就会出现未定义的 我认为问题在于readStream部分,更具体地说,从readStream到字符串的转换。当我用writeStream替换readStream时,我能够下载一份完美的图像副本 然而,我不需要那个。我需要的是将图像发送到前端 我尝试了很多不同的想法,
上载部分已经在工作,但我在图像的下载部分遇到了问题,因为每当我尝试将readStream从数据库转换为字符串时,我的控制台中就会出现
未定义的
我认为问题在于readStream部分,更具体地说,从readStream到字符串的转换。当我用writeStream替换readStream时,我能够下载一份完美的图像副本
然而,我不需要那个。我需要的是将图像发送到前端
我尝试了很多不同的想法,比如移动createServer和MongoClient.connect
。我还尝试了不同的包,它们可以将流
直接转换为字符串
MongoClient.connect(dbURL, function(err, client){
if(err) throw err;
// setting db name
var db = client.db("formImgs");
// bucket to interact with GridFS
bucket = new mongodb.GridFSBucket(db);
// loop to upload each image
for(var i = 0; i < fileNames.length; i++){
// uploads to the database using file locations
fs.createReadStream("photos/" + fileNames[i]).pipe(bucket.openUploadStream(fileNames[i]))
.on("error", function(e){
// error handling
console.log(e);
}).on("finish", function(){
// success
console.log("Done uploading!");
});
}
const server = http.createServer((req, res) => {
var readStream = fs.createReadStream("photos/LaptopRegistry.png");
bucket.openDownloadStreamByName("LaptopRegistry.png").pipe(readStream);
var bufs = [];
// THIS IS WHERE I THINK MY CODE MESSES UP
readStream.on("data", function(chunk){
bufs.push(chunk);
}).on("end", function(){
var fbuf = Buffer.concat(bufs);
base64 = fbuf.toString("base64");
});
res.statusCode = 200;
res.setHeader("Content-Type", "text/plain");
fs.readFile("index.html", function(err, data) {
res.writeHead(200, {"Content-Type": "text/html"});
res.write(data);
//insert use of base64 string here
});
});
});
});
MongoClient.connect(dbURL,函数(err,客户端){
如果(错误)抛出错误;
//设置数据库名称
var db=client.db(“formigs”);
//bucket与GridFS交互
bucket=new mongodb.GridFSBucket(db);
//循环以上载每个图像
对于(var i=0;i{
var readStream=fs.createReadStream(“photos/LaptopRegistry.png”);
bucket.openDownloadStreamByName(“LaptopRegistry.png”).pipe(readStream);
var bufs=[];
//这就是我认为我的代码出错的地方
readStream.on(“数据”,函数(块){
推送(块);
}).on(“结束”,函数(){
var fbuf=缓冲液浓度(bufs);
base64=fbuf.toString(“base64”);
});
res.statusCode=200;
res.setHeader(“内容类型”、“文本/普通”);
readFile(“index.html”,函数(err,data){
res.writeHead(200,{“内容类型”:“text/html”});
res.write(数据);
//在此处插入base64字符串的用法
});
});
});
});