Express and Koa are more 1-1 comparisons and HAPI is slightly different so I’ll explain the diffs for those first.
Express and Koa are both middleware driven server libraries. With middleware you’re defining a set of functions to handle an incoming request and either return a result from that function or make some changes to the incoming request (or outgoing response) and pass on to the next set of middleware (think each middleware function as a colored lens letting light through or a mirror reflecting light back).
The big difference between the two is how they setup middleware, call middleware, and deal with async behavior (and the resulting errors or responses).
Express is based on callbacks so async actions will need to use callbacks as a control flow. While you can use async/await or generators in Express middleware the library itself does not handle this and may exit early or hang (there are some middleware that can be added that add more flexibility for async/await to Express but they aren’t 1st pa