I’m currently the lead architect and developer for (what’s becoming) a decently large Nodejs application, and can confidently say that a lack of inherent code organization is a huge disadvantage. It gets especially exacerbated when the development team as a whole isn’t familiar with asynchronous programing or standard design patterns. There are just too many ways for code to get unruly and unmaintainable.
There are definitely modules that ease those pains though, such as:, Express, and Mongoose. The issue I have with them is that they haven’t had enough “competition” from other modules, and thus haven’t matured to the point of being “generic” solutions. On a personal note, I still prefer Connect over Express, simply because it provides just enough functionality to make HTTP in Node manageable, but not so much that it forces you into one paradigm or another. I’d also suggest using instead of for the same reason.
A quick case study: LinkedIn uses Nodejs to power the JSON API for their mobile site/app. It does not however, power their backend. The Node services most likely draw from a caching layer, or use RPC/REST to query necessary data from the backend services. The advantage there is that they get really high throughput and a straightforward solution to horizontal scaling, without huge memory or CPU usage. (JVM)