如何将Morgan添加到Loopback 4 RestApplication?

问题描述

我只是想添加morgan来记录我的http调用。我尝试过的两种方法是:

  1. 将其添加到MySequence类中:
export class MySequence extends MiddlewareSequence {
 async handle(context: RequestContext) {
   const finished = await this.invokeMiddleware(context,[morgan()]);

   if (finished) {
     return;
   }

   await super.handle(context);
 }
}
  1. 调用this.sequence(MySequence)文件中的application.ts之前添加它:
export class MyAppApiApplication extends BootMixin(
  ServiceMixin(RepositoryMixin(RestApplication)),) {
  constructor(options: ApplicationConfig = {}) {
    super(options);

    this.expressMiddleware(
      morgan,{},{
        injectConfiguration: 'watch',key: 'middleware.morgan',}
    );
    this.sequence(MySequence);

    ...
}

在从以下位置更新环回依赖项之前,第一种方法已起作用:

"@loopback/boot": "^2.4.1","@loopback/core": "^2.9.3","@loopback/repository": "^2.11.0","@loopback/rest": "^6.0.0","@loopback/rest-explorer": "^2.2.8","@loopback/service-proxy": "^2.3.6",

收件人:

"@loopback/boot": "^3.0.1","@loopback/core": "^2.10.1","@loopback/repository": "^3.0.1","@loopback/rest": "^7.0.1","@loopback/rest-explorer": "^3.0.1","@loopback/service-proxy": "^3.0.1",

该更新显然做了一些使它停止工作的操作,但我不知道是什么。

此外,我在文档中也看到了其他方法,例如使用Interceptor的方法,但是当它像在Express应用程序中添加中间件一样容易时,这感觉像是一个过大的杀伤力。

解决方法

请将您的更改还原为MySequence.ts。以下内容就足够了:

export class MySequence extends MiddlewareSequence {
}

您应该注意,MiddlewareSequence会自动发现使用this.expressMiddleware注册的摩根中间件。

在以下位置查看工作示例:

https://github.com/strongloop/loopback-next/blob/master/examples/todo/src/application.ts#L46

,

我使用了Raymond的示例,但必须从config对象中删除stream.write函数,以使其正常工作。像这样使用示例,我可以看到中间件已注册,但仍然看不到Morgan的日志。

只需将let res = await collection.find(status: 'open'); for (user of res) { output = "User: " + user._id + " - " + await city(user.city) + output; console.log(output); } 对象留空:

defaultConfig

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...