Skip to content

Instantly share code, notes, and snippets.

@anmolsukki
Last active May 5, 2020 13:50
Show Gist options
  • Save anmolsukki/fc5f1cfdfc3192602258949e90daf9f3 to your computer and use it in GitHub Desktop.
Save anmolsukki/fc5f1cfdfc3192602258949e90daf9f3 to your computer and use it in GitHub Desktop.
[ NodeJs ] Json File Crud ( yargs )

run yargs file

node App.js add --title="List Item" --body="Sweater, pants, Jeans"

node App.js remove --title="List Item"

node App.js list

node dubugger

Run Command

node inspect App.js add --title="Clothes" --body="Sweater, pants"

hit in chrome

chrome://inspect
const yargs = require('yargs')
const notes = require('./notes.js')
// Customize yargs version
yargs.version('1.1.0')
// Create add command
yargs.command({
command: 'add',
describe: 'Add a new note',
builder: {
title: {
describe: 'Note title',
demandOption: true,
type: 'string'
},
body: {
describe: 'Note body',
demandOption: true,
type: 'string'
}
},
handler: function (argv) {
notes.addNote(argv.title, argv.body)
}
})
// Create remove command
yargs.command({
command: 'remove',
describe: 'Remove a note',
builder: {
title: {
describe: 'Note title',
demandOption: true,
type: 'string'
}
},
handler: function (argv) {
notes.removeNote(argv.title)
}
})
// Create list command
yargs.command({
command: 'list',
describe: 'List your notes',
handler: function () {
notes.listNotes()
}
})
// Create read command
yargs.command({
command: 'read',
describe: 'Read a note',
builder: {
title: {
describe: 'Note title',
demandOption: true,
type: 'string'
}
},
handler(argv) {
notes.readNotes(argv.title)
}
})
yargs.parse()
const fs = require('fs');
const chalk = require("chalk");
const addNote = function (title, body) {
const notes = loadNotes()
const duplicateNotes = notes.filter(function (note) {
return note.title === title
})
if (duplicateNotes.length === 0) {
notes.push({
title: title,
body: body
})
saveNotes(notes)
console.log('New note added!')
} else {
console.log('Note title taken!')
}
}
const removeNote = function(title) {
const notes = loadNotes()
const notesToKeep = notes.filter(function(note) {
return note.title !== title
})
if(notes.length > notesToKeep.length) {
console.log(chalk.green.inverse("Not Removed"))
saveNotes(notesToKeep)
}
else {
console.log(chalk.red.inverse("No note Found"))
}
}
const listNotes = () => {
const notes = loadNotes()
console.log(chalk.inverse("Your Notes.."))
notes.forEach((note) => {
console.log(note.title)
});
}
const readNotes = (title) => {
const notes = loadNotes()
const note = notes.find((nots) => nots.title === title)
if(note) {
console.log(chalk.inverse(note.title))
console.log(note.body)
}
else{
console.log(chalk.red.inverse("Note not found.."))
}
}
const saveNotes = function (notes) {
const dataJSON = JSON.stringify(notes)
fs.writeFileSync('notes.json', dataJSON)
}
const loadNotes = function () {
try {
const dataBuffer = fs.readFileSync('notes.json')
const dataJSON = dataBuffer.toString()
return JSON.parse(dataJSON)
} catch (e) {
return []
}
}
module.exports = {
addNote: addNote,
removeNote: removeNote,
listNotes: listNotes,
readNotes: readNotes
}
[
{ "title": "List Item", "body": "Sweater, pants, Jeans" },
{ "title": "List", "body": "Sweater, pants" },
{ "title": "List Item Found", "body": "Sweater, pants, Jeans" }
]
{
"name": "abc",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"chalks": "^0.1.5",
"yargs": "^15.3.1"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment