use (fn) {
    if (typeof fn !== 'function') { throw new TypeError('middleware must be a function!') }
    debug('use %s', fn._name || fn.name || '-')
    this.middleware.push(fn)
    return this
  }
Use the given middleware `fn`.

Old-style middleware will be converted.

@param {(context: Context) => Promise<any | void>} fn
@return {Application} self
@api public