0

I am not able to use the File System module of Nodejs. I have gone through many forums - applied the suggested fixes - and I'm still not able to use fs.

My config.js file includes this as is suggested by https://github.com/request/request/issues/1529 :

node: {
            console: true,
            fs: 'empty',
            net: 'empty',
            tls: 'empty'
},

This is my main file:

...

var fs = require('fs');

...
onGo(e){

    e.preventDefault();


    var json = {
        foo: 'bar',
        qux: 'moo',
        poo: 123
    }

    var xls = json2xls(json);

    //everything runs smoothly right until here

    fs.writeFileSync('data.xlsx', xls);  //fs is where trouble ensues

 }

I have tried using fs.write/fs.writeFile/etc but 'fs' is always generating a typeerror.

Please help me. Thanks.

12
  • 1
    e.preventDefault(); in nodejs? :) Commented Oct 26, 2015 at 1:47
  • i am using reactjs on a webpack-dev-server which is based off of nodejs Commented Oct 26, 2015 at 1:48
  • 2
    You cannot use Node's fs module in the browser. Commented Oct 26, 2015 at 1:49
  • even after removing that line, I'm still getting the same error :( Commented Oct 26, 2015 at 1:49
  • 1
    Depends on what you are trying to do. Do you want to save a file on the client or the server? Commented Oct 26, 2015 at 1:54

1 Answer 1

2

No need for serverside code. Solution:

onGo(e){

    e.preventDefault();


    var json = {
        foo: 'bar',
        qux: 'moo',
        poo: 123
    }

    JSONToCSVConvertor(json, 'some-data', true);

 }

function JSONToCSVConvertor(JSONData, ReportTitle, ShowLabel) {
    //If JSONData is not an object then JSON.parse will parse the JSON string in an Object
    var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData;

    var CSV = '';    
    //Set Report title in first row or line

    CSV += ReportTitle + '\r\n\n';

    //This condition will generate the Label/Header
    if (ShowLabel) {
        var row = "";

        //This loop will extract the label from 1st index of on array
        for (var index in arrData[0]) {

            //Now convert each value to string and comma-seprated
            row += index + ',';
        }

        row = row.slice(0, -1);

        //append Label row with line break
        CSV += row + '\r\n';
    }

    //1st loop is to extract each row
    for (var i = 0; i < arrData.length; i++) {
        var row = "";

        //2nd loop will extract each column and convert it in string comma-seprated
        for (var index in arrData[i]) {
            row += '"' + arrData[i][index] + '",';
        }

        row.slice(0, row.length - 1);

        //add a line break after each row
        CSV += row + '\r\n';
    }

    if (CSV == '') {        
        alert("Invalid data");
        return;
    }   

    //Generate a file name
    var fileName = "MyReport_";
    //this will remove the blank-spaces from the title and replace it with an underscore
    fileName += ReportTitle.replace(/ /g,"_");   

    //Initialize file format you want csv or xls
    var uri = 'data:text/csv;charset=utf-8,' + escape(CSV);

    // Now the little tricky part.
    // you can use either>> window.open(uri);
    // but this will not work in some browsers
    // or you will not get the correct file extension    

    //this trick will generate a temp <a /> tag
    var link = document.createElement("a");    
    link.href = uri;

    //set the visibility hidden so it will not effect on your web-layout
    link.style = "visibility:hidden";
    link.download = fileName + ".csv";

    //this part will append the anchor tag and remove it after automatic click
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.