4

我正在尝试将摩根和温斯顿记录器一起使用。我收到以下错误。我使用了组合的预设格式。然后我想使用我的记录器记录请求。

[ts] '"combined"' 类型的参数不可分配给 'FormatFn' 类型的参数。

app.use(morgan("combined" {
    stream(meta: any) {
       this.log.info("Request served", meta);
    },
    objectMode: true,
}));
4

1 回答 1

3

问题是传递给函数的第二个对象与为其声明的类型不匹配,即morgan.Options. 因此,编译器会跳过'combine'作为参数的重载,最终,当发现没有匹配的重载时,将选择最后一个重载来报告错误,从而给出相当混乱的错误消息。

您传入的对象文字不匹配morgan.Options,因为stream应该是类型interface StreamOptions { write(str: string): void;}并且字段objectMode根本不存在morgan.Options(至少在没有增强的库存版本中,我没有安装Winston

下面的代码通过了编译器检查(请注意,我实际上并没有运行此代码,我不熟悉morgan仅提供有关 typescript 类型错误的帮助):

morgan('combined', {
    stream: {
        write: (meta: any) => {
           this.log.info("Request served", meta);
        },
    }
});
于 2018-07-04T10:44:07.993 回答