In my code I have to login a user with username and password. But if the user sends his e-mail instead of his username, I have to resolve it with another request.This is what the code looks like:exports.auth = (request, response, next) ->  username = request.body.username  if request.body.email      users.findByEmail request.body.email, (error, result) ->          return next new InternalServerError(error) if error          username = result[0].username          auth.auth username, request.body.password, (error, result) ->              return next new InternalServerError(error) if error              response.json responseData  else      auth.auth username, request.body.password, (error, result) ->          return next new InternalServerError(error) if error          response.json responseDataAs you can see there are 3 duplicate lines. Does anyone know a good code style do make this better? Maybe with Promises? Async Waterfall? Waitfor?
NodeJS conditional request before the real request
node.js;coffeescript
Promises would make sense to me, but first step would be to extract stuff into functions.You don't really need promises for this, though. Here's one way to just do it with plain callbacks:exports.auth = (request, response, next) ->  getUsername = (request, cb) ->    email = request.body.email    return cb null, request.body.username unless email    users.findByEmail email, (error, result) ->      return cb new InternalServerError(error) if error      cb null, result[0].username  getUsername (err, username) ->    return next err if err    auth.auth username, request.body.password, (err, json) ->      return next err if err      response.json json