-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
70 lines (56 loc) · 2.39 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// On utilise express pour créer un serveur. body-parser pour parse le body des requests et nodemon pour être sur que le serveur restart quand il y a du chagements dans les fichiers.
const express = require('express')
const bodyParser = require('body-parser')
const app = express()
const port = 3000
// Le create endpoint
const fs = require('fs')
const stringify = require('csv-stringify').stringify
// Le read endpoint
const parse = require('csv-parse').parse
const os = require('os')
const multer = require('multer')
const upload = multer({ dest: os.tmpdir() })
// Initialisation du serveur
app.use(bodyParser.json())
app.use(express.static('public'))
app.listen(port, () => {
console.log(`App listening on port ${port}`)
})
// Validation des datas envoyées, stringify fonction pour créer le string CSV. La fonction prend les datas pour les string en premier parametre, en objet d'option en second et en 3ème une fonction callback.
// Option header pour assurer les noms de colones en header du csv
// Fonction callback on créer un fichier fs dans le dossier files en utilisant writeFile. Le fichier va contenir le strong du csv en utilisant stringify. Dans la fonction writeFile on retourne le csv pour donwload.
app.post('/create', (req, res) => {
const data = req.body.data
if (!data || !data.length) {
return res.status(400).json({ success: false, message: 'Please enter at least 1 row' })
}
stringify(data, {
header: true
}, function(err, str) {
const path = './files/' + Date.now() + '.csv'
// Creation du dossier files s'il n'exsiste pas
if (!fs.existsSync('./files')) {
fs.mkdirSync('./files')
}
fs.writeFile(path, str, function(err) {
if (err) {
console.error(err)
return res.status(400).json({ success: false, message: 'An error occurred' })
}
res.download(path, 'file.csv')
})
})
})
// Le read endpoint
app.post('/read', upload.single('file'), (req, res) => {
const file = req.file
const data = fs.readFileSync(file.path)
parse(data, (err, records) => {
if (err) {
console.error(err)
return res.status(400).json({ success: false, message: 'An error occurred' })
}
return res.json({ data: records })
})
})