The "fibers" utility is quite popular. There are also several different promise libraries, and a few code-translation approaches that simulate coroutines.
They all build on top of the very simple EventEmitter and continuation-passing-style ("callback") style that the node-core API uses.
As a JavaScript luddite, I prefer passing functions around and listening to events :)