I also loves golang concurrency design, but node.js is pretty handy to write microservices these days. You probably will find some messy legacy code only with callbacks/promise hell etc.., but you also find shit code in any language, so it's not node.js fault. It's pretty straightforward to write elegant async/concurrent/parallel code with node.js using generators and async/await
post('api/v1/orders', async (ctx) => {
try {
// for me one app is fast when handling IO bound, like this
await Promise.all([
Order.create(ctx.body),
Invoice.update(ctx.body),
Tracking.updateWithOrder(ctx.body),
Event.traceOk(ctx.body)
])
ctx.body = {created: true}
}
catch (err) {
ctx.throw(422, err)
await Event.traceErr(ctx.body)
}
})