0
我有一個客戶端的NodeJS流的200K左右的文本文件的應用程序的NodeJS服務器節省在MongoDB的表中的信息。流大的文本文件到服務器的NodeJS
這是工作好小文件,但使用大的文本文件時,服務器說,「從接收到的數據......」幾次流一個唯一的文件,就像如果服務器打破件文件,然後在打開170k文件流,3個條目在MongoDB中,當我只想要一個。
感謝您的幫助
這是服務器:
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';
// DB Config
var databaseUrl = "logserver";
var collections = ["logs"]
var db = require("mongojs").connect(databaseUrl, collections);
server.listen(PORT, HOST, function() {
//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 from ' + conn.remoteAddress);
db.logs.save({log_timestamp: current_time, client_ip: conn.remoteAddress, log_data: data.toString('utf8')}, function(err, saved) {
if(err || !saved) console.log("- Log not saved -");
else console.log("- Log saved -");
});
});
})
});
這是客戶端:
var net = require('net');
var fs = require('fs');
var PORT = 9001;
var HOST = '127.0.0.1';
var FILEPATH = 'file.txt';
var client = new net.Socket()
//connect to the server
client.connect(PORT,HOST,function() {
'Client Connected to server'
//send a file to the server
var fileStream = fs.createReadStream(FILEPATH);
fileStream.on('error', function(err){
console.log(err);
})
fileStream.on('open',function() {
console.log('Sending log file...');
fileStream.pipe(client);
});
});
//handle closed
client.on('close', function() {
console.log('Connection finished')
});
client.on('error', function(err) {
console.log(err);
});
它的工作,謝謝。這樣做很好嗎?或者你認爲可以用其他方式做得更好? – codiaf
據我所知,這是處理塊的一種相當標準的方法。我不認爲Mongo有任何'$ append'操作符,所以它是我能想到的唯一選項。 – ZachRabbit