将二进制转换为 base64 时缓冲区溢出

buffer overflow when converting binary to base64

当我尝试从 mongoDB 中提取图像数据并尝试将其转换为 base64 时,我 运行 陷入缓冲区溢出。我知道在 mongo 中存储图像不是最优的,但我想这样做,只是为了这样做。

这是我收到的错误:

'start-server' errored after 6.28 s
[22:21:05] Error: stdout maxBuffer exceeded
    at Socket.<anonymous> (child_process.js:255:14)
    at emitOne (events.js:90:13)
    at Socket.emit (events.js:182:7)
    at readableAddChunk (_stream_readable.js:153:18)
    at Socket.Readable.push (_stream_readable.js:111:10)
    at Pipe.onread (net.js:529:20)

这是调用和转换数据的路由:

 app.get('/api/photos', function (req, res) {
    var photos = Photo.find({}, function(err, photos) {
      if(photos.length != 0){
        var photosData = [];
        for(var i = 0; i < photos.length; i++){
          var thumb = new Buffer(photos[i].img.data).toString('base64');
          photosData.push(thumb);
        }
        res.json({info: 'it worked',
          photos: photosData
        });
      }else{
        res.json({info: 'it worked',
          photos: false
        });
      }
    });
  }) 

请参阅有关 maxBuffers 的问题:Reading binary data from a child process in Node.js

这实际上来自我的 gulp 文件,因为我有一个 exec 任务正在启动我的服务器。必须将 maxBuffer 添加到该子进程,如下所示。

gulp.task('start-server', ['build', 'watch'], function (cb) {
    if(!started){
        exec('node dist/server.js', {maxBuffer: 5000*1024}, function (err, stdout, stderr) {
        console.log(stdout);
        console.log(stderr);
        cb(err);
        started = true;
      });
    }
});