I think Node definitely is the right tool for a lot of use cases, but for 99% of all web sites, it's not the right choice.
Long answer:
I am currently using it in production and it works great. It performs admirably, and is easy to use. I use to aggregate data relevant to our business.
It's basically a service I've written that anybody can send data to (in a particular format) to indicate that something happened. They can then subscribe to that "bucket" of data they have sent to the "collector" and it will let the subscriber know every time that event has happened.
This is a classic example of what Node is excellent at doing. Extremely low-latency IO handling that involves little-to-no computation.
It REALLY is that simple. Don't use Node for an application that is going to be a massive team effort (because sharing JavaScript code is a nightmare), and don't use it for an application that requires a good-deal of computation (something that you would use threads for in other languages/environments that isn't IO-handling).
The problem is that using Node (and all other things) requires a value judgement. Exactly how massive is too massive? And exactly how much computation is too much? The computation question gets a bit tricky to, because if it's computation that is extremely complicated but won't be executed all that often then Node may still be the right tool for the job.
The hype around Node is fading, because people "In the know", now have a clear understanding of what Node is good at and what it is bad at. The technical reasons why this is the case are not hard to grasp, but they take a while to explain and cannot be labelled as being "all-good" or "all-bad" (indeed Node's technical limitations have also given it some of its major strengths).
Javascript is a scripting language and on server side it should be used like this.. scripting language, small and independent pieces of code, not a 100kloc+ "OOP" clusterfuck :)
should my business depend on some weekend projects posted on github?
The "script" in javascript doesn't make it any less of a programming language (it was a marketing play on Java), and in some ways it is more powerful than many others. Debugging is the same as debugging any other server-side language, and you're only worried about your application code; V8 is a very stable project, you're not going to find yourself debugging the interpreter.
This is already a part of the 'easy validations' but it comes in in a lot more places; being able to just shove the same code to client and server and have it run is really a win for me. Simplified, I have my own class libraries which are loaded both on client and server with most code the same and some different depending where I am, and without thinking I can just execute the same code everywhere; I even just send code via socket.io from server->client dynamically when it comes in handy and it's a better experience for the user.
For these ad-hoc kind of systems it is hard to think of anything as fast and simple to get started with. (Sure you could use Twisted, Sinatra, or some other framework, but node.js is very very simple to get started with which helps a lot.)
But for most larger things I like having threads, and an event based network loop. For that I'm a bit if a java guy and use netty.
Event based I/O concurrency (regardless of programming language) is a #win.