1

I am building a full-stack application using MERN(MongoDB, Express, React, Node.js).

I have a .CSV file that I uploaded to MongoDB. However I can't get my routes to return any data. I can see the database collection on my MongoDB cluster, But it's not showing up in my mongo shell.

My thought process is that's why I can't get my routes to work. How can I fix that?

sample .csv file data

Date,Client,Project,Project Code,Hours,Billable?,First Name,Last Name,Billable Rate
,,,,,,,,
4/3/17,Anil,Ethereum,RD001,3.84,No,Robert,Powell,0
4/3/17,Olith,Pharos,DV002,7.69,Yes,Hubert,Green,80
4/3/17,Olith,Pharos,DV002,4.46,Yes,Bradley,Hale,80
4/3/17,Olith,Pharos,DV002,7.57,Yes,Rudy,Parker,80
4/3/17,Prosaria,Business Development,GM001,0.92,No,Walter,Silva,0

As you can see the data exists in my mongo-atlas

enter image description here

But my mongo-shell is empty when I call db.clients.find()

enter image description here

server.js

const express = require('express');
const app = express();
const mongodb = require('mongodb').MongoClient;
const fs = require('fs');
const fastcsv = require('fast-csv');
const csvtojson = require('csvtojson');
require("dotenv").config()

const PORT = process.env.PORT || 3003;


//middleware
app.use(express.json());
app.use(express.urlencoded({extended: false}));
app.use(express.static(__dirname + 'public'));


// Global Configuration
const MONGODBURI = process.env.MONGODBURI || 'mongodb://localhost:27017/projectData';


let stream = fs.createReadStream('./gm_data.csv');
let csvData = [];
let csvStream = fastcsv
  .parse()
  .on('data', (data) => {
    csvData.push({
      date: data[0],
      client: data[1],
      project: data[2],
      projectCode: data[3],
      hours: data[4],
      billable: data[5],
      firstName: data[6],
      lastName: data[7],
      billableRate: data[8]
    })
  })
  .on('end', () => {
    csvData.shift();
    console.log(csvData);

    mongodb.connect(
      MONGODBURI, {
        useNewUrlParser: true, 
        useUnifiedTopology: true
    },
      (err, client) => {
        if (err) throw err;
          client
            .db('gm-clients')
            .collection('clients')
            .insertMany(csvData, (err, res) => {
              if (err) throw err;
              console.log(`Inserted: ${res.insertedCount} rows`);
              client.close
            });
      }
    );
  });

stream.pipe(csvStream);


//TEST ROUTE --- // http://localhost:3003/
app.get('/', (req, res) => {
  res.send('Say Hello to Zee Server')
})


//routes
const customerRoutes = require('./routes/routes.js');
app.use('/customer', customerRoutes);


//Listening
app.listen(PORT, () => {
    console.log('Listening on port', PORT)
})

routes.js

const express = require('express')
const router = express.Router();
const path = require('path');
let fs = require('fs');
let parse = require('csv-parse');
const csv = require('csvtojson');

const Customer = require('../models/customer.js');


//Index Route -- //http://localhost:3003/customer/allcustomers
router.get('/allcustomers', (req, res) => {
    Customer.find({}, 'client', (err, data) => {
      res.json({data: data});
    })
  })


module.exports = router;

models.js

const mongoose = require('mongoose')

const customerSchema = new mongoose.Schema({
    name: String, //project col in CSV
    clients: String, //client col in csv
    hours: Number, // hours col in csv
    billable_hours: Number, // billable col in csv
    billable_amount: Number // billable rate in csv
})

// name | clients | hours | billable hours | billable amount

module.exports = mongoose.model('Customer', customerSchema);
codernon
  • 35
  • 1
  • 7

0 Answers0