From f4b43f55f00411d15a30dce45c91d8046cd1f3a4 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sat, 26 Mar 2016 21:43:18 -0500 Subject: [PATCH] refactor: Remove express-csv dependency --- package.json | 2 +- website/src/controllers/api-v2/challenges.js | 16 ++++++++--- website/src/controllers/api-v2/coupon.js | 16 ++++++++--- website/src/controllers/dataexport.js | 28 +++++++++++++++----- 4 files changed, 46 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 058433df62..0001ba711e 100644 --- a/package.json +++ b/package.json @@ -21,9 +21,9 @@ "connect-ratelimit": "0.0.7", "cookie-session": "^1.2.0", "coupon-code": "~0.3.0", + "csv-stringify": "^1.0.2", "domain-middleware": "~0.1.0", "express": "^4.13.4", - "express-csv": "~0.6.0", "firebase": "^2.2.9", "firebase-token-generator": "^2.0.0", "glob": "^4.3.5", diff --git a/website/src/controllers/api-v2/challenges.js b/website/src/controllers/api-v2/challenges.js index a749e0a2c2..967f175213 100644 --- a/website/src/controllers/api-v2/challenges.js +++ b/website/src/controllers/api-v2/challenges.js @@ -8,7 +8,7 @@ var User = require('./../../models/user').model; var Group = require('./../../models/group').model; var Challenge = require('./../../models/challenge').model; var logging = require('./../../libs/logging'); -var csv = require('express-csv'); +var csvStringify = require('csv-stringify'); var utils = require('../../libs/utils'); var api = module.exports; var pushNotify = require('./../pushNotifications'); @@ -112,9 +112,17 @@ api.csv = function(req, res, next) { }) output.push(uData); }); - res.header('Content-disposition', 'attachment; filename='+cid+'.csv'); - res.csv(output); - challenge = cid = null; + + res.set({ + 'Content-Type': 'text/csv', + 'Content-disposition': `attachment; filename=${cid}.csv`, + }); + + csvStringify(output, (err, csv) => { + if (err) return next(err); + res.status(200).send(csv); + challenge = cid = null; + }); }) } diff --git a/website/src/controllers/api-v2/coupon.js b/website/src/controllers/api-v2/coupon.js index a7605a26cb..8ab576cb6e 100644 --- a/website/src/controllers/api-v2/coupon.js +++ b/website/src/controllers/api-v2/coupon.js @@ -1,7 +1,7 @@ var _ = require('lodash'); var Coupon = require('./../../models/coupon').model; var api = module.exports; -var csv = require('express-csv'); +var csvStringify = require('csv-stringify'); var async = require('async'); api.ensureAdmin = function(req, res, next) { @@ -21,10 +21,18 @@ api.getCoupons = function(req,res,next) { if (req.query.limit) options.limit = req.query.limit; if (req.query.skip) options.skip = req.query.skip; Coupon.find({},{}, options, function(err,coupons){ - //res.header('Content-disposition', 'attachment; filename=coupons.csv'); - res.csv([['code']].concat(_.map(coupons, function(c){ + let output = [['code']].concat(_.map(coupons, function(c){ return [c._id]; - }))); + })) + + res.set({ + 'Content-Type': 'text/csv', + 'Content-disposition': `attachment; filename=habitica-coupons.csv`, + }); + csvStringify(output, (err, csv) => { + if (err) return next(err); + res.status(200).send(csv); + }); }); } diff --git a/website/src/controllers/dataexport.js b/website/src/controllers/dataexport.js index 58932b7696..8c16b9864f 100644 --- a/website/src/controllers/dataexport.js +++ b/website/src/controllers/dataexport.js @@ -1,9 +1,8 @@ var _ = require('lodash'); -var csv = require('express-csv'); var express = require('express'); +var csvStringify = require('csv-stringify'); var nconf = require('nconf'); var moment = require('moment'); -var dataexport = module.exports; var js2xmlparser = require("js2xmlparser"); var pd = require('pretty-data').pd; var User = require('../models/user').model; @@ -22,6 +21,8 @@ var request = require('request'); ------------------------------------------------------------------------ */ +var dataexport = module.exports; + dataexport.history = function(req, res) { var user = res.locals.user; var output = [ @@ -29,13 +30,26 @@ dataexport.history = function(req, res) { ]; _.each(user.tasks, function(task) { _.each(task.history, function(history) { - output.push( - [task.text, task.id, task.type, moment(history.date).format("MM-DD-YYYY HH:mm:ss"), history.value] - ); + output.push([ + task.text, + task.id, + task.type, + moment(history.date).format("MM-DD-YYYY HH:mm:ss"), + history.value + ]); }); }); - return res.csv(output); -} + + res.set({ + 'Content-Type': 'text/csv', + 'Content-disposition': `attachment; filename=habitica-tasks-history.csv`, + }); + + csvStringify(output, (err, csv) => { + if (err) return next(err); + res.status(200).send(csv); + }); +}; var userdata = function(user) { if(user.auth && user.auth.local) {