winston-elasticsearch: TypeError: Elasticsearch is not a constructor

winston-elasticsearch: TypeError: Elasticsearch is not a constructor

我在快速服务器上使用 winston-elasticsearch,我只是编写了与文档中相同的代码

var winston = require('winston');
var Elasticsearch = require('winston-elasticsearch');

var esTransportOpts = {
  level: 'info'
};
var logger = winston.createLogger({
  transports: [
    new Elasticsearch(esTransportOpts)
  ]
});

当我 运行 服务器时,我得到这个错误:

TypeError: Elasticsearch is not a constructor

我已经安装了最新版本"winston":“^3.2.1”和"winston-elasticsearch":“^0.8.8”

降级版本"winston-elasticsearch":“0.7.0”修复了问题。

如文档中所述:

Compatibility For Winston 3.x, Elasticsearch 6.0 and later, use the 0.7.0. For Elasticsearch 6.0 and later, use the 0.6.0. For Elasticsearch 5.0 and later, use the 0.5.9. For earlier versions, use the 0.4.x series.

来源:https://www.npmjs.com/package/winston-elasticsearch

有一个 open issue 正是关于这个。

在此期间,您可以npm i --save winston-elasticsearch@0.7.12

对于 Winston 3.x,Elasticsearch 6.0 及更高版本,使用 0.7.0。对于 Elasticsearch 6.0 及更高版本,请使用 0.6.0。对于 Elasticsearch 5.0 及更高版本,请使用 0.5.9。对于早期版本,使用 0.4.x 系列。

@asma 的建议,降级到 0.7.x,确实为我修复了这个错误。但是,这让我停留在一个过时的版本上,得到了一个不同的错误,该错误已在最新版本中修复。

@joe提到的问题现已关闭。它解释说每个人都通过调整他们的语法来适应重大变化。但是,自述文件仍然使用旧语法。

通过如下调整示例,我能够使最新版本 (0.8.8) 正常工作:

var winston = require('winston');
var winstonElasticSearch = require('winston-elasticsearch');

var esTransportOpts = {
  level: 'info'
};
var logger = winston.createLogger({
  transports: [
    new winstonElasticSearch.ElasticsearchTransport(esTransportOpts)
  ]
});