我有一个MongoDB集合,我根据时间范围和地址编号查询。如果查询成功,则服务器将返回CSV文件,其中包含存储在每个查询条目中的多个属性。这部分工作正常。
问题是我的CSV文件中的一个属性是时间戳。我希望它返回本地日期时间(即“时间”:“2014-02-09T06:00:02.000Z”)...但是CSV文件以毫秒(即“时间”)返回日期对象“:1392040717774)。有没有一种简单的方法可以在将查询条目写入CSV文件之前转换为本地日期字符串?这是我的代码片段:
var JSONStream = require('JSONStream');
var httpserver = http.createServer(function(req, res) {
var pathname = url.parse(req.url).pathname;
if (pathname=="/DownloadUCData") {
var requestData = '';
req.on('data', function (data) {
requestData += data;
});
req.on('end', function () {
var json = JSON.parse(requestData);
var st = new Date(json.startDate);
var et = new Date(json.endDate);
st.setHours(st.getHours()-4); //compensate for GMT offset
et.setHours(et.getHours()-4);
st=st.getTime();
et=et.getTime();
var proj=JSON.parse('{"state":1, "temperature":1, "mode":1, "speed":1, "time":1}');
var cursor = userControlCollection.find({"addr": json.addr.toString(), "time": {$gte:st, $lte:et}}, proj);
var dbstream = cursor.stream();
var tempname = json.type+".csv";
var wstream = fs.createWriteStream(tempname);
wstream.on('error', function(e){console.error(e);});
dbstream.on("end", function() {
wstream.end();
console.log("write end");
res.writeHead(200, {"Content-Type": "application/json"});
res.write(JSON.stringify({fname:tempname}));
res.end();
return;
});
var jsonToStrings = JSONStream.stringify(false);
dbstream.pipe(jsonToStrings).pipe(wstream);
});
}
答案 0 :(得分:0)
所以,我想出了解决这个问题的一种方法(尽管可能还有其他方法)。基本上,我必须在管道系统中添加一个转换,将.getTime()数据转换为新的Date()对象。这是代码片段似乎解决了这个问题:
var Transform = require('stream').Transform;
var parser = new Transform({objectMode: true});
parser._transform = function(data, encoding, done) {
if(data.time) data.time = new Date(data.time);
this.push(data);
done();
};
var jsonToStrings = JSONStream.stringify(false);
dbstream.pipe(parser).pipe(jsonToStrings).pipe(wstream);