在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 問個node日志組件 morgan 的源碼實現(xiàn)問題

問個node日志組件 morgan 的源碼實現(xiàn)問題

這個組件源碼本身不大,500多行。
打算學(xué)習(xí)下源碼,不過遇到了個問題。
我抽取了主要的代碼。代碼如下:

function morgan(format, options) {
  var fmt = format
  var opts = options || {}

  var formatLine = typeof fmt !== 'function'
    ? getFormatFunction(fmt)
    : fmt

  return function logger() {

  }
}

function getFormatFunction (name) {
  // lookup format
  var fmt = morgan[name] || name || morgan.default

  // return compiled format
  return typeof fmt !== 'function'
    ? compile(fmt)
    : fmt
}

morgan.format('dev', function developmentFormatLine (tokens, req, res) {
  // get status color
  var color = 0

  // get colored function
  var fn = developmentFormatLine[color]

  if (!fn) {
    // compile
    fn = developmentFormatLine[color] = compile('\x1b[0m:method :url \x1b[' +
      color + 'm:status \x1b[0m:response-time ms - :res[content-length]\x1b[0m')
  }

  return fn(tokens, req, res)
})



function format(name, fmt) {
  morgan[name] = fmt
  return this
}

function compile (format) {
  if (typeof format !== 'string') {
    throw new TypeError('argument format must be a string')
  }

  var fmt = format.replace(/"/g, '\\"')
  var js = '  "use strict"\n  return "' + fmt.replace(/:([-\w]{2,})(?:\[([^\]]+)\])?/g, function (_, name, arg) {
    var tokenArguments = 'req, res'
    var tokenFunction = 'tokens[' + String(JSON.stringify(name)) + ']'

    if (arg !== undefined) {
      tokenArguments += ', ' + String(JSON.stringify(arg))
    }

    return '" +\n    (' + tokenFunction + '(' + tokenArguments + ') || "-") + "'
  }) + '"'

  // eslint-disable-next-line no-new-func
  return new Function('tokens, req, res', js)
}




morgan('dev')

然后運行后報錯了
morgan.format is not a function

源碼里我看到他先定義了個morgan方法,然后直接在下面調(diào)用morgan.format('combined',...)
確實有點不通,誰能幫忙看下 謝謝

回答
編輯回答
幼梔

加上

morgan.format = format;
2018年2月17日 12:56
編輯回答
離魂曲

謝謝
https://stackoverflow.com/que... 也在stackoverflow問了 說的是一個意思

2018年1月21日 11:53