Route's internal middleware stack execution works with Promises (bluebirdjs).
//...
const route = router.buildRoute({/*options*/});
route.main(function(req, res) {
    return asyncProcedure();
}).catch(TypeError, function(err) {
    err.message === 'error message'; //true
});
function asyncProcedure() {
    return Promise.reject(new TypeError('error message'));
}
All errors which happen in a request lifecycle get eventually processed by internal errorHandler middleware.
Service App can respond to a request only with an error of type RequestError thus all other errors which don't extend the RequestError are coerced to meet the condition (converted to ServiceError).
All unexpected errors - aka all errors which do NOT inherit RequestError or are instance of ServiceError - trigger App#event:error event on App instance object.
All unexpected errors are logged to configured remote destination by the bi-logger package.
See bi-service ErrorList for the list of built-in Error types.  
You can influence the way errors are processed by the following events: