Дмитрий Шидловский: fs.ReadFileSync() блокирует I/O и event loop - по сути останавливает сервер. Таких действий надо избегать. callback, кстати, элегантней синхронного кода хотя бы потому, что можно обрабатывать ошибки без выброса исключений (не говоря уже о не блокируемом I/O). Если не переносите callback - воспользуйтесь Promise, но они все равно будут асинхронными.
Kirill Kuznetsov: такие задачи обычно выполняют в отдельном потоке (child_process.fork можно использовать). И не мешало бы указать версию Node, все же v8 там часто радикально отличается.
D' Normalization: мы, к примеру, храним в gridfs оригиналы картинок, а в cdn публичные ресайзы (под разные srcset) с вотермарками (по сути быстрый кэш). Но есть и непубличные файлы с правами доступа, вот там только бд по понятным причинам.