Monday, 5 June 2017

nodejs: compare function generated JSON data to JSON file

I have a function that scans a directory and creates a JSON file with the audio files metadata. I want it to check if the file already exists and only overwrite if there is any diference between the file that was created from the last time the script was run and the data from the the second time it runs.

This is my code:

var fs = require('fs');
var nodeID3 = require('node-id3');
var path = require('path');
var tracksPath = './public/tracks/';
var dataPath = './public/data/';

fs.readdir(tracksPath,function(err,files){
    if(err) {
        throw err;
    }

    //Read the tracks metadata
    var tracksMetadata = [];
    files.forEach(function(trackName){
        var trackFile = nodeID3.read(tracksPath + trackName);


        //If the track returns metadata push it to the array
        if (trackFile.title && trackFile.artist){
            var metadata = {
                "filename" : trackName,
                "title" : trackFile.title,
                "artist" : trackFile.artist
            };
            tracksMetadata.push(metadata);
        }

        //If no metadata is found ignore and log it to the console
        else if (trackName.charAt(0) != "."){
            var filename = {
                  "filename" : trackName
            };

            tracksMetadata.push(filename);

            console.log(trackName + " doesn't have metadata. Ignoring.");
        }

        if(fs.existsSync(dataPath + "metadata.json")){
            fs.readFile(dataPath + "metadata.json",'utf8', function    (err, data){
                if (err) throw err;

                console.log(JSON.parse(JSON.stringify(data)));                  
               console.log(JSON.parse(JSON.stringify(tracksMetadata)));

                console.log(Boolean(JSON.parse(JSON.stringify(data)) == JSON.parse(JSON.stringify(tracksMetadata))));
        });
    }
    });


    fs.writeFile(path.join(dataPath, 'metadata.json'), 
JSON.stringify(tracksMetadata),'utf8', function(err){
        if(err){
            throw err;
        }
        console.log("Tracks Metadata JSON created succesfully");
    });
});

Right now I'm only writing to the console a Boolean value that checks wether the data from the file and the data generated by the function are equal and so far I get false.

What should I do?



via medicengonzo

No comments:

Post a Comment