I googled to know few of them like asynchronous, callbacks and Single-threaded. But i want know the actual disadvantages and how they effect the application. Anyone with good experience in node can help me. Thanks in Advance.
Developers who are new to Node.js will have to start thinking in terms of asynchronous non-blocking code rather than synchronous blocking code. For many, this is the biggest disadvantage of switching to Node.js. You need to be careful while writing async code because if you accidentally write a synchronous piece of code it'll block the main thread (as it's single threaded) which in turn affects the performance of your app.
If you are from Java/Python etc you will have a hard time dealing with nested callbacks. Promises can solve this problem to a small extent, but not fully. You will still miss your callback free cleaner code.
But if you love JavaScript and are able to think clearly in terms of asynchronous programming, then you are going to love Node.js.
Node is perfect for IO-heavy applications, for example web applications.
If you need to perform tasks that require only little IO and a lot of processing power (for example text recognition), Node isn't a good fit: Due to its single-threaded nature it will block the event loop until the current (long-running) task is done. So your application will basically be hanging. For these types of applications a multi-threaded runtime is a better choice.
That despite the advantages of Node.js, there are many nonbelievers. The speed of development and speed of the application should be just enough to prove Node.js right to exist.
I love NodeJS. But My biggest issue is using NodeJS + ExpressJS Templating + NeDB (aka MongoDB). Because you have to code asynchronously as stated by @Sandeep Panda. But I love the power of EJS Templating (works like JSP, if you have a Java background)
Vasan Subramanian
Previous generation techie
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.