我正在尝试使用节点/窗口将数据插入InfluxDb,但是有一个(看似众所周知的)错误,我无法理解我的想法。我试图通过从文件加载数据并使用POST发送到我的数据库来批量插入我的本地数据库。以下是我要插入的数据:
test_data.txt
test_measurement test=val1 1516665684
test_measurement price=val2 1516665685
test_measurement price=val3 1516665686
使用代码:
var http = require("http");
var fs = require('fs');
fs.readFile('test_data.txt', { encoding: 'utf8' }, function (err, data) {
var options = {
"method": "POST",
"hostname": "localhost",
"port": "8086",
"path": "/write?db=test_db",
"headers": {
"cache-control": "no-cache"
}
};
var req = http.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
var body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(data);
req.end();
});
我收到错误
{"error":"unable to parse 'test_measurement test=val1 1516665684\r': bad timestamp\nunable to parse 'test_measurement price=val2 1516665685\r': bad timestamp\nunable to parse 'test_measurement price=val3 1516665686': bad timestamp"}
从我的研究中,我知道windows使用\ r \ n字符作为回车符,但是我无法解决如何解决这个问题。我在读取文件时尝试删除所有\ r和\ n字符,但它似乎没有删除它们,因为我继续得到相同的错误。即使我能够以这种方式移除它们,涌入如何知道批次的下一个插入物的开始位置?它需要知道下一行开始批量插入的位置,但不喜欢新行字符。
任何帮助都会很棒!!
答案 0 :(得分:1)
Double quote string field values. Do not double quote floats, integers, or booleans.
更新(在描述中出现实际响应后)
然后显然是\r
。
你的文件是由Windows编辑器创建的,我认为 - 它最后都有两个符号。
所以你只需把它变成Unix格式,有很多工具可能,Notepad ++最受欢迎。
或者,更好的是,只需在代码中添加一些简单的字符串预处理,它就是JS的超级简单:
req.write(data.replace("\r",""));