I am by no means an expert, but I found the following while building my web app using node:
When you need a script to be run, eg, a cron-job to supplement what your web-app does, you will have to pick another language, because sequential processing is not that natural to do. Kinda defeats the purpose of why I started with node in the first place -- to avoid context switching between different languages in the front-end and back-end. In the end, I persisted with node even for the scripts using async.js (because I wanted to share some code) and the results are satisfactory.
It takes time to get used to the async programming model, especially if you have multiple layers of IO. You will end up with deeply nested callbacks (error handling will make it more complicated, BTW).
This is true for javascript in general (as compared to languages like Java): functions and APIs are not self-documenting. You will have to read the documentation for what to pass in function parameters, but node's async programming model's reliance on callbacks makes it worse: I had to read every API calls' documentation carefully (in this case, mongo driver) to understand what the callback function parameter expects.