Pro Works on top of Express
Sails was created to add stronger conventions to Express apps, as well as to have an ORM which could work transparently with both NoSQL and SQL databases. It works on a bit of a higher level on the development stack as Express, and the fact that it's built on top of it means that Sails does not have to deal with the most lower level stuff (such as critical performance and consistency issues across many different modules, like the Express router, cookie parser, body parser, etc...)
Pro ORM that can be plugged into any database, or even custom web service
Sails.js uses Waterline ORM at its backend which means you can store your data in any datastore that you like; all you have to do is make a change to the Waterline adapter, this will allow you to store your data in MySQL/Redis or any other kind of database.
Con Limited ORM
The Waterline ORM is a bit limited. Associations were finally added after much time and many requests. However, they are (as of 2015) still incomplete. It is not a great ORM for MongoDB. You will very likely be using native MongoDB queries throughout your code more than you might like (for example, in the event you want to use Mongo's
$inc to increment something). It's strange that Sails did not simply leverage an existing ORM for their frameworks. Many people fall into the trap of wanting to build their own despite many other existing solutions. It is only then that they realize just how much work goes into an ORM. Fortunately you can bring in whatever packages you want to use with Sails.js.
Con Starting up takes a lot of time
One of the major benefits that Sails has is performance. But it's not as efficient when starting up.
sails lift takes quite a lot of time to execute completely (although it is doing a lot of things behind the scenes - if you run it with the
--verbose option, you can see all the different things it's doing).
Granted, this would be perfectly fine if you had to execute
sails lift just once, but unfortunately every time that you change anything you have to stop and start lift again.