Node.js Morgan在控制台打印输出中不使用颜色

Node.js Morgan在控制台打印输出中不使用颜色,node.js,morgan,Node.js,Morgan,您必须如何设置/定义morgan以使其仍然遵守设置的颜色模式,是否有限制或规则?我目前有以下摩根设置 morgan.token('date', (req, res, tz) => { return moment().tz(tz).format(); }) morgan.format('myformat', '[:date[America/Los_Angeles]][:remote-addr] ":method :url" :status :res[content-length] -

您必须如何设置/定义morgan以使其仍然遵守设置的颜色模式,是否有限制或规则?我目前有以下摩根设置

morgan.token('date', (req, res, tz) => {
  return moment().tz(tz).format();
})

morgan.format('myformat', '[:date[America/Los_Angeles]][:remote-addr] ":method :url" :status :res[content-length] - :response-time ms')

app.use(morgan('myformat', function (tokens, req, res) {
  return chalk.blue(tokens.method(req, res))
    + ' ' + chalk.green(tokens.url(req, res))
    + ' ' + chalk.red(tokens['response-time'](req, res))
}))
当我使用

app.use(morgan( function (tokens, req, res) {
  return chalk.blue(tokens.method(req, res))
    + ' ' + chalk.green(tokens.url(req, res))
    + ' ' + chalk.red(tokens['response-time'](req, res))
}))

它使用我设置的颜色,但在使用自定义格式时不使用

我相信您调用的
morgan
函数是错误的

根据报告:

morgan(格式、选项)

使用给定格式创建新的morgan logger中间件函数 和选择。format参数可以是预定义名称的字符串 (名称见下文)、格式字符串的字符串或函数 这将生成一个日志条目

format函数将使用三个参数标记req调用, 而且

所以当你打电话时:

app.use(morgan('myformat', function (tokens, req, res) {
  return chalk.blue(tokens.method(req, res))
    + ' ' + chalk.green(tokens.url(req, res))
    + ' ' + chalk.red(tokens['response-time'](req, res))
}))
第二个参数(函数)不是你想要的,因为morgan认为它是
options
参数。我认为实现您想要的功能的唯一方法是在传递给
morgan
的函数中声明令牌顺序及其颜色,如下图所示:


多亏了OzW指针,我才能够使用下面的代码并通过传递我以前使用的格式定义来实现它。与所有想要的颜色搭配,效果非常迷人

app.use(morgan( function (tokens, req, res) {

  return chalk.yellow(moment().tz("America/Los_Angeles").format('ddd, DD MMM YYYY HH:mm:ss.SSS Z z'))
    + ' ' + chalk.blue(tokens['remote-addr'](req, res))
    + ' ' + chalk.cyanBright(tokens.method(req, res))
    + ' ' + chalk.green(tokens.url(req, res))
    + ' ' + chalk.magentaBright(tokens.status(req, res))
    + ' ' + chalk.red(tokens['response-time'](req, res))
}))
app.use(morgan( function (tokens, req, res) {

  return chalk.yellow(moment().tz("America/Los_Angeles").format('ddd, DD MMM YYYY HH:mm:ss.SSS Z z'))
    + ' ' + chalk.blue(tokens['remote-addr'](req, res))
    + ' ' + chalk.cyanBright(tokens.method(req, res))
    + ' ' + chalk.green(tokens.url(req, res))
    + ' ' + chalk.magentaBright(tokens.status(req, res))
    + ' ' + chalk.red(tokens['response-time'](req, res))
}))