throw is a bad idea, in the most cases we pass the error to the callback in node