Продолжайте получать "undefined" при преобразовании readStream в String в GridFS - PullRequest
2 голосов
/ 14 апреля 2019

Я работаю на веб-сайте, который хранит изображения в базе данных MongoDB GridFS, а затем может отображать одно из выбранных изображений пользователю.
Часть загрузки уже работает, но у меня возникают проблемы с частью загрузки образа, потому что всякий раз, когда я пытаюсь преобразовать readStream из базы данных в строку, я получаю undefined в своей консоли.

Я думаю, что проблема заключается в части readStream, более конкретно, преобразовании readStream в String. Когда я заменил readStream на writeStream, я смог получить идеальную копию загруженного изображения.

Однако мне это не нужно. Мне нужно, чтобы изображение было отправлено на внешний интерфейс.

Я пробовал много разных идей, таких как перемещение createServer и MongoClient.connect. Я также пробовал разные пакеты, которые предположительно конвертируют stream прямо в String.

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

        });
    });


    });
});
...