I've deployed a Node/Express app on Heroku and the .split() array method produces entirely different arrays depending on whether it's being run on my local server, or on Heroku.
To start, the code of interest involves reading the contents of a CSV file. When I run the following code on my local server:
var fileContents = fs.readFileSync(__dirname + '/cell_information.csv');
var rows = fileContents.toString().split('\r\n');
console.log(rows);
console.log("rows length: " + rows.length);
I log the following in my local console:
[
[ '0', 'A', 'y' ], [ '1', 'A', 'y' ], [ '2', 'A', 'y' ],
[ '3', 'A', 'y' ], [ '4', 'A', 'y' ], [ '5', 'A', 'y' ],
[ '6', 'A', 'y' ], [ '7', 'A', 'y' ], [ '8', 'A', 'y' ],
[ '9', 'A', 'y' ], [ '10', 'B', 'y' ], [ '11', 'B', 'y' ],
[ '12', 'B', 'y' ], [ '13', 'B', 'y' ], [ '14', 'B', 'y' ],
[ '15', 'B', 'y' ], [ '16', 'B', 'y' ], [ '17', 'B', 'y' ],
[ '18', 'B', 'y' ], [ '19', 'B', 'y' ], [ '20', 'C', 'y' ],
[ '21', 'C', 'y' ], [ '22', 'C', 'y' ], [ '23', 'C', 'y' ],
[ '24', 'C', 'y' ], [ '25', 'C', 'y' ], [ '26', 'C', 'y' ],
[ '27', 'C', 'y' ], [ '28', 'C', 'y' ], [ '29', 'C', 'y' ],
[ '30', 'D', 'y' ], [ '31', 'D', 'y' ], [ '32', 'D', 'y' ],
[ '33', 'D', 'y' ], [ '34', 'D', 'y' ], [ '35', 'D', 'y' ],
[ '36', 'D', 'y' ], [ '37', 'D', 'y' ], [ '38', 'D', 'y' ],
[ '39', 'D', 'y' ], [ '40', 'E', 'y' ], [ '41', 'E', 'y' ],
[ '42', 'E', 'y' ], [ '43', 'E', 'y' ], [ '44', 'E', 'y' ],
[ '45', 'E', 'y' ], [ '46', 'E', 'y' ], [ '47', 'E', 'y' ],
[ '48', 'E', 'y' ], [ '49', 'E', 'y' ]
]
rows.length: 52
After deploying this app (with the same code above) to Heroku and checking the Heroku logs, I get the following:
2021-01-16T02:47:44.853795+00:00 app[web.1]: [
2021-01-16T02:47:44.853805+00:00 app[web.1]: 'CELL,TYPE,ANSWER\n' +
2021-01-16T02:47:44.853805+00:00 app[web.1]: '0,A,y\n' +
2021-01-16T02:47:44.853806+00:00 app[web.1]: '1,A,y\n' +
2021-01-16T02:47:44.853806+00:00 app[web.1]: '2,A,y\n' +
2021-01-16T02:47:44.853806+00:00 app[web.1]: '3,A,y\n' +
2021-01-16T02:47:44.853807+00:00 app[web.1]: '4,A,y\n' +
2021-01-16T02:47:44.853807+00:00 app[web.1]: '5,A,y\n' +
2021-01-16T02:47:44.853807+00:00 app[web.1]: '6,A,y\n' +
2021-01-16T02:47:44.853807+00:00 app[web.1]: '7,A,y\n' +
2021-01-16T02:47:44.853808+00:00 app[web.1]: '8,A,y\n' +
2021-01-16T02:47:44.853808+00:00 app[web.1]: '9,A,y\n' +
2021-01-16T02:47:44.853808+00:00 app[web.1]: '10,B,y\n' +
2021-01-16T02:47:44.853809+00:00 app[web.1]: '11,B,y\n' +
2021-01-16T02:47:44.853809+00:00 app[web.1]: '12,B,y\n' +
2021-01-16T02:47:44.853809+00:00 app[web.1]: '13,B,y\n' +
2021-01-16T02:47:44.853809+00:00 app[web.1]: '14,B,y\n' +
2021-01-16T02:47:44.853810+00:00 app[web.1]: '15,B,y\n' +
2021-01-16T02:47:44.853810+00:00 app[web.1]: '16,B,y\n' +
2021-01-16T02:47:44.853810+00:00 app[web.1]: '17,B,y\n' +
2021-01-16T02:47:44.853811+00:00 app[web.1]: '18,B,y\n' +
2021-01-16T02:47:44.853811+00:00 app[web.1]: '19,B,y\n' +
2021-01-16T02:47:44.853811+00:00 app[web.1]: '20,C,y\n' +
2021-01-16T02:47:44.853812+00:00 app[web.1]: '21,C,y\n' +
2021-01-16T02:47:44.853812+00:00 app[web.1]: '22,C,y\n' +
2021-01-16T02:47:44.853812+00:00 app[web.1]: '23,C,y\n' +
2021-01-16T02:47:44.853813+00:00 app[web.1]: '24,C,y\n' +
2021-01-16T02:47:44.853813+00:00 app[web.1]: '25,C,y\n' +
2021-01-16T02:47:44.853813+00:00 app[web.1]: '26,C,y\n' +
2021-01-16T02:47:44.853813+00:00 app[web.1]: '27,C,y\n' +
2021-01-16T02:47:44.853814+00:00 app[web.1]: '28,C,y\n' +
2021-01-16T02:47:44.853815+00:00 app[web.1]: '29,C,y\n' +
2021-01-16T02:47:44.853815+00:00 app[web.1]: '30,D,y\n' +
2021-01-16T02:47:44.853815+00:00 app[web.1]: '31,D,y\n' +
2021-01-16T02:47:44.853815+00:00 app[web.1]: '32,D,y\n' +
2021-01-16T02:47:44.853816+00:00 app[web.1]: '33,D,y\n' +
2021-01-16T02:47:44.853816+00:00 app[web.1]: '34,D,y\n' +
2021-01-16T02:47:44.853816+00:00 app[web.1]: '35,D,y\n' +
2021-01-16T02:47:44.853817+00:00 app[web.1]: '36,D,y\n' +
2021-01-16T02:47:44.853817+00:00 app[web.1]: '37,D,y\n' +
2021-01-16T02:47:44.853817+00:00 app[web.1]: '38,D,y\n' +
2021-01-16T02:47:44.853818+00:00 app[web.1]: '39,D,y\n' +
2021-01-16T02:47:44.853818+00:00 app[web.1]: '40,E,y\n' +
2021-01-16T02:47:44.853818+00:00 app[web.1]: '41,E,y\n' +
2021-01-16T02:47:44.853818+00:00 app[web.1]: '42,E,y\n' +
2021-01-16T02:47:44.853819+00:00 app[web.1]: '43,E,y\n' +
2021-01-16T02:47:44.853819+00:00 app[web.1]: '44,E,y\n' +
2021-01-16T02:47:44.853819+00:00 app[web.1]: '45,E,y\n' +
2021-01-16T02:47:44.853820+00:00 app[web.1]: '46,E,y\n' +
2021-01-16T02:47:44.853820+00:00 app[web.1]: '47,E,y\n' +
2021-01-16T02:47:44.853820+00:00 app[web.1]: '48,E,y\n' +
2021-01-16T02:47:44.853820+00:00 app[web.1]: '49,E,y\n'
2021-01-16T02:47:44.853821+00:00 app[web.1]: ]
rows length: 1
As you can see, the Heroku log shows an array with only one element (observe that the new length is 1) - the giant string that's supposed to be many subarrays as seen in my local console output. Therefore, it seems like the .split() method doesn't actually split the file contents at all, but instead puts the file contents string inside of an array. This behavior is troubling me greatly because I would expect that the .split() method is deployment independent. Any thoughts explaining this behavior would be greatly appreciated.