在项目中扩展express.Request

时间:2017-11-13 14:20:46

标签: typescript express

我是打字稿的新手,所以请耐心等待。

我正在开发基于Express的Web服务。我想让一块早期中间件在请求对象上设置一个日志记录对象,稍后在请求处理程序流中使用它。

中间件和最终请求处理程序组织在不同的文件中。

集中扩展express.Request-object以允许在没有类型警告的情况下使用此日志记录对象的最佳方法是什么?

只是为了表明我拥有和想要的东西:

实例化的文件表达并设置我的日志对象:

const app = express();
const log = console;

app.use((req: express.Request, res: express.Response, next: express.NextFunction) => {
    req.log = log;
    next();
});

请求处理程序:

(req: express.Request, res: express.Response): void => {
    req.log("request was made");
    res.send();
}

1 个答案:

答案 0 :(得分:3)

您可以像这样扩展express.Request对象:

declare global {
  namespace Express {
    interface Request {
      log(...params: any[]): void
    }
  }
}

或者,如果您想更清楚地区分vanilla Request类型和增强版本,您可以执行以下操作:

interface RequestWithLogging extends express.Request {
  log(...params: any[]): void
}

app.get('/', (req: RequestWithLogging, res: express.Response) => {
  req.log('Log something')
  res.send('Hello World!')
})