【问题标题】:Why Morgan Logger server middleware doesn't work in separate file?为什么 Morgan Logger 服务器中间件不能在单独的文件中工作?
【发布时间】:2021-02-09 20:02:57
【问题描述】:

我在 nextjs 应用程序中关注 this tutorial 添加新的 middleware 用于日志记录,因此我的 server.js 中有以下代码:

// create a write stream (in append mode)
const accessLogStream = fs.createWriteStream(path.join(__dirname, 'access.log'), { flags: 'a' })

// setup the logger
server.use(morgan('combined', { stream: accessLogStream }))

而且它工作正常。

但是我想将逻辑放在中间件目录的单独文件中,所以我有:

middlewares/logger/index.js

import morgan from "morgan";
import fs from 'fs';
import path from 'path';


export default (req, res, next) => {
  var accessLogStream = fs.createWriteStream(path.join(__dirname, 'access.log'), { flags: 'a' })

  return morgan('combined', { stream: accessLogStream });
};

在我的 server.js 中,我将拥有:(在导入和初始化内容之后)

  server.use(logger);
  server.use(othermiddlewareone);
  server.use(othermiddlewaretwo);

其他中间件工作正常,但这个中断了。你知道这是为什么吗?

【问题讨论】:

    标签: express logging next.js middleware morgan


    【解决方案1】:

    我像这样更改了中间件,现在它工作正常:)

    import type { Request, Response, Next } from './types';
    import morgan from "morgan";
    import fs from 'fs';
    import path from 'path';
    
    const accessLogStream = fs.createWriteStream(path.join(__dirname, 'server.log'), { flags: 'a' })
    const logger = morgan('combined', { stream: accessLogStream })
    
    export default async (req: Request, res: Response, next: Next) => {
      logger(req, res, function (err) {
        return next();
      })
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      • 2014-11-24
      • 2016-11-20
      相关资源
      最近更新 更多