Skip to content

Instantly share code, notes, and snippets.

@TalhaAwan
Created August 3, 2017 18:40
Show Gist options
  • Save TalhaAwan/240e1650b3c5862ec944deacda71ba6e to your computer and use it in GitHub Desktop.
Save TalhaAwan/240e1650b3c5862ec944deacda71ba6e to your computer and use it in GitHub Desktop.
Node/expresss endpoint to generate a downloadable link to csv file of mongodb collection "logs"
const fs = require('fs');
const json2csv = require('json2csv'); //"json2csv": "^3.7.3"
const moment = require('moment'); //"moment": "^2.17.1"
const mkdirp = require('mkdirp'); //"mkdirp": "^0.5.1",
const del = require('del'); //"del": "^2.2.2"
const fields = ['collection', 'message', 'createdAt'];
const Log = require ( './log.model');
const Controller = {};
Controller.export = function(req, res){
Log.find({})
.sort('-createdAt')
.exec(function(err, logs){
if(err){
return res.status(500).end();
}
else{
mkdirp('./public/exports', function (err) { //create "exports" dir in a static folder (public in this case, defined during express configuration)
if (err){
return res.json(err).status(500);
}
else{
var csv = json2csv({ data: logs, fields: fields });
var dateTime = moment().format('YYYYMMDDhhmmss');
var filePath = 'exports/logs'+dateTime+'.csv';
fs.writeFile('./public/' + filePath, csv, function(err) {
if (err){
return res.json(err).status(500);
}
else{
setTimeout(function(){ // delete exports directory after 30 seconds
del.sync(['./public/exports']);
}, 30000)
return res.json(filePath);
}
});
}
});
}
})
};
module.exports = Controller;
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
var logSchema = new Schema({
collection:{
type: String
},
message: {
type: String
},
createdAt: {
type: Date,
required: true,
default: Date.now
}
});
module.exports = mongoose.model('Log', logSchema);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment