Node.Js introduces itself as a asynchronous event driven JavaScript runtime. To achieve this asynchronous nature , node uses a open source library called libuv.
libuv even though built for Node , it is not exclusive to Node.js. There are plenty of other projects which uses libuv.
While network i/o is asynchronous , the same can't be said for disk i/o .
libuv uses single threaded operation to use event loop and produce asynchronous network i/o . Mostly lib pool APIs are not thread safe as it is designed to work in single threaded mode only.
Disk i/o has some platform specific differences . Every major APIs for disk I/O has it's own limitations, this also increases complexity. So libuv uses blocking disk operations using thread pool.