I guess it would be cheating if I answered, but the main reason I made actionhero was the mutli-transport features. Node is singularly positioned to handle "more than just vanilla HTTP(s)", and I was surprised that no other framework made agnostic actions/controllers/etc available to developers. Using the same logic for both a HTTP POST login and a WS login just make sense to me (DRY, etc). I actually had HTTP + Socket (tcp) as my initial targets as as I was making games at the time, but the metaphor still applies. I also think that since node is, by definition an "always on" daemon (unlike PHP or ruby-sometimes), there's also the opportunity to treat other incoming data streams as a "server". I go over this in detail in the
tutorial, but say your app wanted to ingest tweets. The metaphor can be extended to treat each tweet as a connection and abstractly handle it like an user request, IE: It can chat, trigger actions, etc.
https://github.com/evantahler/actionhero-tutorial/blob/master/servers/twitter.js
I'm also a fan of bundling in background jobs a first-class citizen. I've never worked on a project where we didn't quickly realize that we needed to separate our "request" threads from our "processing" threads. Usually email sending was the trigger, but it *always* comes up. Why not start with it? Perhaps your project will out-grow the resque-backed job system, but changing the transport of a queue system within a project is easier than implementing one if you haven't used one at all.
You can of course do both of these things with express with enough add-ons and plugins, but I felt that these features belong as 'first-class' citizens of a modern API server.
To speak to the negatives, I've seen a lot of folks unhappy that actionhero is not a "rendering" server, meaning that it won't compose dynamic views for you (like rails). The file server was a later addition to the project (as we had to ensure that file data could also be sent to *all* clients, not just HTTP), and I still view actionhero as only an API server. I personally feel that a complex asset-pipeline project or rendering engine should be distinct from your backend, and I think that the trend is going this way with more and more front-end frameworks (angular, react, etc) which mostly make your HTML static anyway.