Showing posts with label csv parse in nodejs. Show all posts
Showing posts with label csv parse in nodejs. Show all posts

Monday, 24 August 2020

File upload and parse in Node JS

CSV File Format:

username,city
tony,new york
steve,washington dc
bruce,queens
clint,london
natasha,perth

'use strict';

const http = require('http');
const fs = require('fs');
const csvp = require('csv-parser');
const cors = require('cors')
const express = require('express');
const app = express();
const busboy = require('connect-busboy');       // A node.js module for parsing incoming HTML form data.

const server = http.createServer(app);
const port = 8084;

app.use(busboy());
app.use(cors());

app.post('/file', function (req, res) {
    var fstream;
    let errors = [];
    req.pipe(req.busboy);

    req.busboy.on('file', function (fieldname, file, filename) {
        fstream = fs.createWriteStream('uploads/' + filename);
        file.pipe(fstream);

        fstream.on('close', function () {
            fs.createReadStream('uploads/test.csv')
                .pipe(csvp())                       // { headers: false } to skip headers
                .on('data', (row) => {
                    console.log("row", row);
                    try {
                        username = row.username;
						city = row.city;					
                    } catch (exception) {
                        return res.status(400).json({ status: 400, data: exception, message: "Invalid CSV file" });
                    }
                })
                .on('end', () => {
                    if (errors.length > 0) {
                        console.log("Errors", errors);
                        return res.status(400).json({ status: 400, data: errors, message: "Invalid records in the csv file" });
                    } else {
                        console.log("Success");
                        return res.status(200).json({ status: 200, data: {}, message: "File upload successfully" });
                    }
                });
        });
        
    });
});

// Start server
function startServer() {
    server.listen(port, function () {
        console.log('Express server listening on ', port);
    });
}

setImmediate(startServer);