乐趣区

express中使用morgan

用于记录 http 请求的 node.js 的模块。

使用方法

morgan(format[, options])
format 记录日志的格式(String 型)。
options 是配置项组成的对象。

有 4 种使用形式

morgan(‘tiny’) // 使用内置 format 的名称
morgan(‘:method :url’) // 使用自定义的 formatString
morgan((tokens, req, res) => {…}) // 使用返回 formatString 的方法。tokens 是包含所以已定义的全部 token 的对象。我通过 log 得到 token 就是 morgan 的实例。
morgan(morgan.compile(formatString)) // 使用预编译后的 formatFunction.

api

var morgan = require('morgan')
morgan(format, options)
// format 是 String/Function。morgan 内置了一些记录格式的名称。也可以使用自定义的格式名称。若 format 是 Function 时,接收 3 个参数(tokens, req, res)这个方法返回一个 string 作为记录格式,当返回 undefined/null 时跳过记录。// options 是配置项组成的对象。morgan('tiny') // 使用内置的格式
morgan(':method :url :status :res[content-length] - :response-time ms') // 使用预定义的格式
morgan((tokens, req, res) => [tokens.method(req, res), tokens.url(req, res), tokens.status(req, res), tokens.res(req, res, 'content-length'), '-', tokens['response-time'](req, res), 'ms'].join(' ')) // 使用自定义的格式

morgan 接收一些配置项作为 options 对象。

format

morgan 有一些内置的 format。

option type describe default demo
combined 使用标准 apache 的行内输出 :remote-addr – :remote-user [:date[clf]] “:method :url HTTP/:http-version” :status :res[content-length] “:referrer” “:user-agent”
common 使用标准 apache 的一般输出 :remote-user [:date[clf]] “:method :url HTTP/:http-version” :status :res[content-length]
dev 简明地输出有颜色的状态码的输出。服务端出错时,使用红色。客户端出错时,使用黄色。重定向时,使用蓝绿色。别的没有颜色。 :method :url :status :response-time ms – :res[content-length]
short 使用比默认更短的输出。 :remote-addr :remote-user :method :url HTTP/:http-version :status :res[content-length] – :response-time ms
tiny 使用最小的输出 :method :url :status :res[content-length] – :response-time ms

自定义 format。

morgan.format(‘formatName’, ‘format’) // 定义 format
formatName 是 format 的名称。
format 是 format 的格式。string 型。里面可以使用 token。
morgan.format(‘joke’, [joke] :method) // demo
morgan(‘formatName’) // 使用

在 morgan 里的源码是这样的。

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

tokens

下面是内置的 token 类型

tokenName describe
:data[format] 使用哪种时间格式(可选的有:clf`iso`web
:http-version
:method
:referrer
:remote-addr
:remote-user
:req[header] 请求头里的 header. 若没有则返回 -
:res[header]
:response-time[digits] 从接到请求到返回数据之间花费的时间。digits 是精度。默认是 3. 表示 ms.
:status
:url
:user-agent

创建新的 token
morgan.token('tokenName', cb) // cb 是接受 req,res 的回调方法。
morgan.token('type', (req, res) => req.headers[content-type]) // 定义
:type// 使用

在 morgan 里的源码是这样的。

function token (name, fn) {morgan[name] = fn
    return this
}
morgan.token = token

由 tokens 组成 format 再作为 morgan 的参数使用。

options

option type describe default demo
immediate Boolean true: 收到请求时记录。false: 返回请求时记录。
skip Boolean / Function(req, res){} 是否跳过记录
stream 记录的输出流配置。默认使用 process.stdout

morgan.compile(format)

把 string 型的 format 编译为 function 型的 format。
这个 function 接收三个参数(tokens, req, res)。tokens 是一个具有所有已经定义的 token 的对象,req 是请求,res 是回馈。该方法返回一个 string 型的单行记录文本。若返回 undefined,/ null,则跳过记录。

format 是 String 型。使用单行文本,里面写入 :token[params].

使用 format 时一般是 morgan.format(name, format),但是还有一些高级用法可以直接使用 compile。如:morgan.compile('[joke] :method :url :response-time ms')。这种方法是把 formatString 预编译为 formatFunction.

morgan.compile(formatString) 返回的是 Function,所以使用方法如下:

morgan.compile('[joke] :method')
// or
let ff = morgan.compile('[joke] :method')
morgan.format('fs', ff)
morgan('fs')
退出移动版