Kevin
Kevin

Reputation: 3631

is the nodejs Buffer asynchronous or synchronous?

I dont see a callback in the Buffer documentation at http://nodejs.org/api/buffer.html#buffer_buffer. Am I safe to assume that Buffer is synchronous? I'm trying to convert a binary file to a base64 encoded string.

What I'm ultimately trying to do is take a PNG file and store its base64 encoded string in MongoDB. I read somewhere that I should take the PNG file, use Buffer to convert to base64, then pass this base64 output to Mongo.

My code looks something like this:

fs.readFile(filepath, function(err, data) {
  var fileBuffer = new Buffer(data).toString('base64');
  // do Mongo save here with the fileBuffer ...
});

I'm a bit fearful that Buffer is synchronous, and thus would be blocking other requests while this base64 encoding takes place. If so, is there a better way of converting a binary file to a base64 encoded one for storage in Mongo?

Upvotes: 4

Views: 4952

Answers (1)

Nathan Friedly
Nathan Friedly

Reputation: 8146

It is synchronous. You could make it asynchronous by slicing your Buffer and converting a small amount at a time and calling process.nextTick() in between, or by running it in a child process - but I wouldn't recommend either of those approaches.

Instead, I would recommend not storing images in your db- store them on disk or perhaps in a file storage service such as Amazon S3, and then store just the file path or URL in your database.

Upvotes: 2

Related Questions