I'm trying to update items stored in a JSON file in a Express App. Basically I'm reading the contents of the JSON file updating the item fetched by Id and writing to the file the updated item.Problem? It's appending the updated item so I get a duplicated. I can't see where is the error?
posts.json:
[
{
"name": "first name",
"description": "test first description",
"slug": "first-name",
"id": "2f065d59"
},
{
"name": "second name",
"description": "test second description",
"slug": "second-name",
"id": "0071b034"
}
]
create-update-delete.js:
var express = require('express');
var Creatordb = require('./database/posts.json');
var fs = require('fs');
var uuid = require('node-uuid');
var _ = require('lodash');
//Create The Item
var add = function (item) {
var id = uuid.v4();
item.id = id;
Creatordb[item.id] = item;
var outputFilename = './database/posts.json';
function appendObject(obj){
var configFile = fs.readFileSync(outputFilename);
var config = JSON.parse(configFile);
config.push(obj);
var configJSON = JSON.stringify(config, null, 4);
fs.writeFileSync(outputFilename, configJSON);
}
appendObject(item);
};
//Get The Item by Id
var getById = function (id) {
for(var i=0;i<Creatordb.length;i++) {
var id = Creatordb[i].id;
}
return id;
};
//Update The Item
var update = function (item) {
var outputFilename = './database/posts.json';
var configFile = fs.readFileSync(outputFilename);
var config = JSON.parse(configFile);
//using lodash??
var index = _.indexOf(config, _.find(config, item));
config.splice(index, 1, item);
var configJSON = JSON.stringify(config, null, 4);
fs.writeFileSync(outputFilename, configJSON);
};
If I update an item the posts.json will look like this:
[
{
"name": "first name",
"description": "test first description",
"slug": "first-name",
"id": "2f065d59"
},
{
"name": "second name edited",
"description": "test second description edited",
"slug": "second-name-edited",
//this id disappeared "id": "0071b034"//
}
]
Now with lodash the Id in the updated item is gone away? Can anyone explain? - Thanks