I know this has been asked many times at many places but I was not able to get a satisfactory answer. I tried a small app in all the three and they look similar to me. I personally liked Hapi.js but not sure if a lot of people are using it?
I like Hapi.js especially the Joi validation and Boom responses. IMO Hapi's handlers are easy to understand and look clean.
Feathers.js is a great extension of express.js that also supports websockets if you want updates automatically broadcasted to clients. Nextjs or nuxtjs can also be added if you want the full react or vuejs experience with isomorphic server side rendering.
Have used Hapi and Express. Community support is great for Express and there are lots of good middleware are availble.
Check out KrackenJs which uses express, has good feature and It's paypal opensource.
I really like spirit. It is fast, functional, easy testable and you can use express middleware.
I hope express v5 will evolve into something like that.
i think it's case by case basis. depends what you wanna do and achieve
Express is my preferred choice of framework for node js projects. It has a lot of community support and widely used. So, if you stuck somewhere you may hope for some help on SO.
Have only used Express. It always worked great :)
How about none? Most of the time, you can write that router-part yourself in 10 lines of code, which results in better control, fewer dependencies and more performent code. See this FAQ for a more detailed answer ;)
However, if you work on a real big enough project, then you should decide based on the features, the community and the extensibility, as well as your gut-feeling with the API. Decide on a per-project base, depending on the project.
By the way, you should definitely also consider security! How secure are the routers, what additional steps do you have to take? See for example the helmet project.
Ritwik Sahoo
To Code and Beyond
I started with http://krakenjs.com It helped me get the basics, start right off without having to think of configuration. But now after 2 years, I have altered the base code to my own needs. That's how you should proceed. Take the problem statement at hand and solve it at the earliest. Then refactor if need arises and not satisfied. Lost time in trying everything on the planet would never ever get the job done.