I was recently asked by someone to give an example of how to read a csv file in their node.js application, and how to parse it to get it to be usable in their app. In fact what they wanted to do is very simple, and it is one of the many reasons I'm a big fan of Node.js, because not only can it do things like this in a few lines of JavaScript, it does it server side, and fast. So This article lays out step by step how to have node.js read and parse a CSV file stored in it's project, by using the CSV module.

Prerequisites:

1. Have a node.js development environment.  If you need a guide to set this up, you should look at the node documentation as it gives an easy tutorial to do so.
2. A Text Editor
3. A CSV file to test
4. That's it

Installing the CSV Node module

After you've setup node.js open up a console and browse to where your project is installed.

Run the following command from the console:

npm install csv

Sample CSV file

You're going to need a CSV file to parse, so either you have one already, or you can copy the text below and paste it into a new file and call that file "mycsv.csv"

 
1
ABC, 123, Fudge
2
532, CWE, ICECREAM
3
8023, POOP, DOGS
4
441, CHEESE, CARMEL
5
221, ABC, HOUSE

Sample Code Reading and Parsing the CSV file

Create a new file, and insert the following code into it.  Make sure to read through what is going on behind the scenes.

x
 
1
var csv = require('csv'); 
2
// loads the csv module referenced above.
3
4
var obj = csv(); 
5
// gets the csv module to access the required functionality
6
7
function MyCSV(Fone, Ftwo, Fthree) {
8
    this.FieldOne = Fone;
9
    this.FieldTwo = Ftwo;
10
    this.FieldThree = Fthree;
11
}; 
12
// Define the MyCSV object with parameterized constructor, this will be used for storing the data read from the csv into an array of MyCSV. You will need to define each field as shown above.
13
14
var MyData = []; 
15
// MyData array will contain the data from the CSV file and it will be sent to the clients request over HTTP. 
16
17
obj.from.path('../THEPATHINYOURPROJECT/TOTHE/csv_FILE_YOU_WANT_TO_LOAD.csv').to.array(function (data) {
18
    for (var index = 0; index < data.length; index++) {
19
        MyData.push(new MyCSV(data[index][0], data[index][1], data[index][2]));
20
    }
21
    console.log(MyData);
22
});
23
//Reads the CSV file from the path you specify, and the data is stored in the array we specified using callback function.  This function iterates through an array and each line from the CSV file will be pushed as a record to another array called MyData , and logs the data into the console to ensure it worked.
24
25
var http = require('http');
26
//Load the http module.
27
28
var server = http.createServer(function (req, resp) {
29
    resp.writeHead(200, { 'content-type': 'application/json' });
30
    resp.end(JSON.stringify(MyData));
31
});
32
// Create a webserver with a request listener callback.  This will write the response header with the content type as json, and end the response by sending the MyData array in JSON format.
33
34
server.listen(8080);
35
// Tells the webserver to listen on port 8080(obviously this may be whatever port you want.)

Things to be aware of in your app.js code

In lines 7 through 11, we define the function called 'MyCSV' and the field names.

If your CSV file has multiple columns make sure you define this correctly to match your file.

On line 17 we define the location of the CSV file of which we are loading.  Make sure you use the correct path here.

Start your App and Verify Functionality

Open a console and type the following Command:

1
Node app

You should see the following output in your console:

x
1
    [  MYCSV { Fieldone: 'ABC', Fieldtwo: '123', Fieldthree: 'Fudge' },
2
       MYCSV { Fieldone: '532', Fieldtwo: 'CWE', Fieldthree: 'ICECREAM' },
3
       MYCSV { Fieldone: '8023', Fieldtwo: 'POOP', Fieldthree: 'DOGS' },
4
       MYCSV { Fieldone: '441', Fieldtwo: 'CHEESE', Fieldthree: 'CARMEL' },
5
       MYCSV { Fieldone: '221', Fieldtwo: 'ABC', Fieldthree: 'HOUSE' }, ]

Now you should open a web-browser and navigate to your server.  You should see it output the data in JSON format.

Conclusion

Using node.js and it's CSV module we can quickly and easily read and use data stored on the server and make it available to the client upon request.  This is just one of many possible uses for it, but it is something that I'm asked about so often I figured many of you could find it useful.  Enjoy!