docs: function initExpress (config) {
      // disable x-powered-by header
      config.express.disable('x-powered-by')
      // enable strict (trailing-slashes) and case-sensitive routing
      config.express.enable('strict routing')
      config.express.enable('case sensitive routing')
      // add each assets dir in reverse order which allows assets from modules
      // to be overridden by app
      _.each(_.reverse(config.dir.assets), dir => {
          config.express.use('/assets', express.static(dir))
      })
      // add requestId and requestCreateTime to req object
      config.express.use(requestIdMiddleware)
      // parse json
      config.express.use(bodyParser.json())
      // parse application/x-www-form-urlencoded
      config.express.use(bodyParser.urlencoded({
          extended: true,
      }))
      // parse cookies
      config.express.use(cookieParser())
      // add logger
      if (config.log) {
          config.express.use(morgan(isProd ? 'combined' : 'dev'))
      }
      // use any additional middleware set in config
      _.each(config.use, use => {
          // if use value is array then use array as args
          if (_.isArray(use)) {
              config.express.use.apply(config.express, use)
          }
          // otherwise value should be function
          else {
              config.express.use(use)
          }
      })
  }