index.jspackage.json додай “скрипти” для запуску index.js
start який запускає index.js за допомогою nodedev який запускає index.js за допомогою nodemonУ корені проекту створи папку db. Для зберігання контактів завантаж і
використовуй файл contacts.json, поклавши його в папку db.
У корені проекту створи файл contacts.js.
fs (у версії, яка працює з промісами - fs/promises) і
path для роботи з файловою системоюcontactsPath і запиши в неї шлях до файлі contacts.json. Для
складання шляху використовуй методи модуля path.fs та його методи readFile() і writeFile()module.exports// contacts.js
/*
* Розкоментуйте і запишить значення
* const contactsPath = ;
*/
// TODO: задокументувати кожну функцію
function listContacts() {
// ...твій код. Повертає масив контактів.
}
function getContactById(contactId) {
// ...твій код. Повертає об'єкт контакту з таким id. Повертає null, якщо контакт з таким id не знайдений.
}
function removeContact(contactId) {
// ...твій код. Повертає об'єкт видаленого контакту. Повертає null, якщо контакт з таким id не знайдений.
}
function addContact(name, email, phone) {
// ...твій код. Повертає об'єкт доданого контакту. Повертає null, якщо контакт з таким id не знайдений.
}
Зроби імпорт модуля contacts.js в файлі index.js та перевір працездатність
функцій для роботи з контактами.
У файлі index.js імпортується пакет yargs для зручного парсу аргументів
командного рядка. Використовуй готову функцію invokeAction() яка отримує тип
виконуваної дії і необхідні аргументи. Функція викликає відповідний метод з
файлу contacts.js передаючи йому необхідні аргументи.
// index.js
const argv = require('yargs').argv;
// TODO: рефакторить
function invokeAction({ action, id, name, email, phone }) {
switch (action) {
case 'list':
// ...
break;
case 'get':
// ... id
break;
case 'add':
// ... name email phone
break;
case 'remove':
// ... id
break;
default:
console.warn('\x1B[31m Unknown action type!');
}
}
invokeAction(argv);
Так само, ви можете використовувати модуль [commander]
(https://www.npmjs.com/package/commander) для парсинга аргументів командного
рядка. Це більш популярна альтернатива модуля yargs
const { Command } = require('commander');
const program = new Command();
program
.option('-a, --action <type>', 'choose action')
.option('-i, --id <type>', 'user id')
.option('-n, --name <type>', 'user name')
.option('-e, --email <type>', 'user email')
.option('-p, --phone <type>', 'user phone');
program.parse(process.argv);
const argv = program.opts();
// TODO: рефакторить
function invokeAction({ action, id, name, email, phone }) {
switch (action) {
case 'list':
// ...
break;
case 'get':
// ... id
break;
case 'add':
// ... name email phone
break;
case 'remove':
// ... id
break;
default:
console.warn('\x1B[31m Unknown action type!');
}
}
invokeAction(argv);
Запусти команди в терміналі і зроби окремий скріншот результату виконання кожної команди.
# Отримуємо і виводимо весь список контактів у вигляді таблиці (console.table)
node index.js --action="list"
# Отримуємо контакт по id і виводимо у консоль об'єкт контакта або null якщо контакту з таким id не існує
node index.js --action="get" --id 05olLMgyVQdWRwgKfg5J6
# Додаємо контакт та виводимо в консоль об'єкт новоствореного контакту
node index.js --action="add" --name Mango --email mango@gmail.com --phone 322-22-22
# Видаляємо контакт та виводимо в консоль об'єкт видаленого контакту або null якщо контакту з таким id не існує
node index.js --action="remove" --id qdggE76Jtbfd9eWJHrssH
Скріншоти виконання команд, можна залити на будь-який безкоштовний хмарний сервіс зберігання картинок (Приклад: monosnap, imgbb.com) і відповідні посилання необхідно додати в файл README.md. Створіть цей файл в корені проекту. Після прикріпіть посилання на сховище з домашнім завданням в schoology для перевірки ментором. Також у файл README.md треба додати посилання на репозиторій зі зробленою роботою.





npm init -y
npm install cors express
npm install –save-dev nodemon
yarn add commander
or
npm i commander
yarn add nanoid@3.3.4
npm run dev
yarn dev