使用NodeJS在mongoDB中逐行保存

时间:2014-02-28 00:28:45

标签: javascript node.js

我正在创建一个用nodejs编写的服务器,它通过server.on('connection', function(conn) {接收一个文件,该文件将该数据存储在缓冲区中。

此数据是一个日志文件,其中每行包含3个重要列:

时间 - 源文件 - 消息

E.g:

2014-02-05 22:12:33,268 - test.py:__init__() - This is message
2014-02-05 22:12:33,268 - test.py:__init__() - This is message 2

我想将这些数据存储在mongoDB系统中,将系统中接收的日志文件和这些行分成列。我记得使用客户端IP作为密钥。

现在我正在创建我放入孔数据的文件,因为我不知道如何逐行读取这种存储的数据,因为readline模块仅用于文件。

任何帮助都会很棒。感谢

这是我服务器的小代码:

var net = require('net'),
    fs = require('fs'),
    buffer = require('buffer');


var server = net.createServer(function(conn) {
    console.log('server connected');

});

var HOST = '127.0.0.1';
var PORT = '9001';
var DEST_DIR = './logs';

server.listen(PORT, HOST, function() {
    // Check if DEST_DIR exists
    if (!fs.existsSync(DEST_DIR)) {
        console.log(DEST_DIR + ' not found. Creating it now...');
        fs.mkdir('logs', '700');
    }
    //listening
    console.log('Listening on port ' + PORT + '\n');

    server.on('connection', function(conn) {
        var current_time = Date.now();

        console.log('connection made...\n')
        conn.on('data', function(data) {
            console.log('data received');
            console.log('data is: \n' + data);
            // Create file
            fs.writeFile(DEST_DIR + '/' + current_time + '.txt', data, function(err){
                if(err){
                    console.log(err);
                }else{
                    console.log("File saved");
                }
            });
        });
    })
});

1 个答案:

答案 0 :(得分:0)

拆分换行符\n上的数据。对于每个条目,拆分列,将每列添加为对象的属性,然后将对象存储在mongoDB中。

data = "time / source file / message \n time / source file / message";
var item, format = ['time', 'source', 'message'];

data = data.toString().split('\n');
while(item = data.pop()){
    item = item.split(/\W-\W/);
    var obj = {};
    item.forEach(function(v, i){
        obj[format[i]] = v;
    });
    // save the object to db
}