问题描述
我只是想添加morgan来记录我的http调用。我尝试过的两种方法是:
- 将其添加到MySequence类中:
export class MySequence extends MiddlewareSequence {
async handle(context: RequestContext) {
const finished = await this.invokeMiddleware(context,[morgan()]);
if (finished) {
return;
}
await super.handle(context);
}
}
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