Created
August 3, 2017 18:40
-
-
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"
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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