尝试使用不同的解析器时,cb不是函数

时间:2016-11-01 18:42:56

标签: javascript node.js amazon-s3 aws-lambda

我在存储桶中有s3服务器访问日志,我正在尝试使用lambda函数将它们发送到AWS上的ElasticSearch服务。

我正在使用的

The example lambda function,它使用clf-parser来粘贴Apache常见的日志文件。由于我想使用s3-log-parser,我做了以下更改:

// instead of 
var parse = require('clf-parser');
// I have
var s3logparser = require('s3-log-parser');

// instead of
var logRecord = parse(line.toString());
// I have
var logRecord = s3LogParser.parse(line.toString());`

我得到了

ReferenceError: s3LogParser is not defined 
我告诉模块错了吗?我做var s3LogParser= require('s3-log-parser');来解决该错误,现在我得到了TypeError: cb is not a function

我注意到在s3解析器的index.js中有这一行:cb(null, parsedLogs); ...试图弄清楚如何解决这个回调问题......

1 个答案:

答案 0 :(得分:2)

好像s3-log-parser模块需要回调并且不会从其parse()函数返回任何内容,即使该函数是100%同步的。因此,获取解析日志的唯一方法是提供回调函数。

var logRecord = s3LogParser.parse(line.toString(), function (err, lines) {
  logRecord = lines
})
console.log(logRecord)

修改

改为使用s3-access-log-parser(example):

var s3alp = require("s3-access-log-parser")
var bogusCharacters = new RegExp(String.fromCharCode(8204, 8203), 'g')
var logRecord = s3alp(line.toString().replace(bogusCharacters, ''))