Professional Documents
Culture Documents
Nadiia Khrystiuk
Nadiia Khrystiuk
// TODO: рефакторить
function invokeAction({ action, id, name, email, phone }) {
switch (action) {
case 'list':
console.log('list')
break;
case 'get':
console.log('id',id)
break;
case 'add':
console.log( 'name email phone', name, email, phone)
break;
case 'remove':
console.log('id',id)
break;
default:
console.warn('\x1B[31m Unknown action type!');
}
}
invokeAction(argv);
і запустіть цей скрип із запропонованими вам методами node index.js --
action="list"Отримуємо контакт з id
node index.js --action="get" --id=5Додаємо контакт
node index.js --action="add" --name="Mango" --email="mango@gmail.com" --phone="322-22-
22"Видаляємо контакт
node index.js --action="remove" --id=3
Ну а далі вам треба прописувати методи в самому contact.js експортувати їх з файлу та
імпортувати у файлі index.js та викликати їх у відповідних case
______________________________
Як додати скрипт користувача в мій файл package.json, який запускає файл index.js?
Ось що треба записати у файлі package.json
"scripts": {
"start": "node index.js"
}
Цей код з файла package.json буде передавати керування від команди npm start на
виконання команди node index.js. І тим самим запускатиметься на виконання файл index.js
Поле «script» Можливо ви цього не знали, але npm містить поле під назвою scripts у
файлі package.json проекту для того, щоб робити такі команди, як npm test, що фактично
виконує вміст поля scripts.test, і npm start, що викликає інструкції з поля scripts. start.
npm test і npm start — це лише зручні посилання для npm run test і npm run start. За
допомогою npm run ... можна виконати будь-який вміст будь-якого поля
всередині scripts.________________________________
npm – головні скрипти
npm - головні скрипти - такі як запуск, зупинка, перезавантаження, встановлення, версія або
тест не потребує виконання команди. Ці сценарії та деякі інші описані у документації npm. І
виконуються вони через написання директиви npm та вказівки самої команди – наприклад.
npm start
Інші користувацькі скрипти npm, щоб викликати вам потрібно додати run перед ім'ям
скрипта npm run dev npm run dev
Абсолютно у всіх розробників знайомство з nodejs починається з того, що після кожної зміни
потрібно перезавантажувати сервер. Тому виникає питання, як зробити так, щоб сервер
перевантажувався автоматично. Найпопулярніший варіант - це nodemon. Тобто ідея
полягає в тому, що в development оточенні ми хочемо, щоб nodemon стежив за файлами, які ми
змінюємо і просто перезапускав сервер, якщо ці файли відносяться до сервера. Необхідно
встановити локально в наш проект як devDependencies nodemon.
npm i -D nodemon
або
yard add nodemon
Тепер у package.json додамо команду для нього.
"scripts": {
"dev": "nodemon index.js"
}
Тепер у консолі давайте запустимо його командою
npm run devЯк ми бачимо, він запустився. Нам вийшло, що він увімкне всі файли в нашій
папці і запускає команду node index.js при зміні будь-якого файлу. Тепер, якщо ми змінимо
наш index.js, то nodemon перезапустить сервер автоматично. Разом у файлі package.json
повинно бути додано два скрипти:
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js"
},
В 1 ДЗ СКРИПТИ ЗАПУСКАТИ НЕМА СЕНСУ - ВИ НІЧОГО НЕ ПОБАЧИТЕ!!! ВОНИ У ВАС
НЕ ВИКОНАЮТЬСЯ ПРАВИЛЬНО!! Ви зможете з ними нормально працювати лише з 2
дз!! ЯКЩО ЗАПУСТИТи СКРИПТИ зараз - ТО ОТРИМАЄТЕ ПОМИЛКУ - чому, тому що ви
викликає index.js без аргументів і потрапляєте у гілку
default:
console.warn('\x1B[31m Unknown action type!');
І ЇЇ Ж ПОБАЧИТЕ В КОНСОЛІ!
___________________________________________________________
Що почитати- https://habr.com/ru/company/ruvds/blog/458504/
Хабр
13 приёмов работы с npm, которые помогают экономить время
Каждый день миллионы разработчиков, создавая свои JavaScript-приложения, обращаются
к npm (или к Yarn). Выполнение команд наподобие npm init или npx create-react-app стало
привычным способом начала... (41 kB)
https://habr.com/ru/company/ruvds/blog/458504/
5:57
_____________________________________________________
Яка різниця між const fs = require('fs') та fs = require('fs').promises;
Спочатку сам модуль був написаний з використанням callback функцій і викликався через
const fs = request("fs");
Далі js розвивався і до модулю додали підтримку промісів
Тепер можна використовувати функції, але працювати з ними не через колбаки, а через
проміси. Відповідно, треба підключити роботу з промісами
const fs = require('fs').promises
Зараз вже працюють, не через проміси, а через обгортку над промісами async/await. Це
скорочує код і такий код читати легше
Якщо вирішили використовувати колбеки, підключаєте бібліотеку без промісів.Хабр
5:57
Що тут потрібно зробити? - // TODO: задокументировать каждую функциюTODO (to do від
англ. try to do sth - спробувати зробити) - поширений тип позначки в коментарях вихідних
текстів програм, документації і т. д., що показує розробнику місце, де слід продовжити
роботу (виправити помилку або неточність, додати функціональність, врахувати якийсь
специфічний випадок тощо).
TODO коментарі
Під час написання коду дуже часто виникає ситуація, коли ви помітили будь-який недолік у
коді, який не настільки критичний, щоб правити його прямо зараз, але дуже бажано
виправити його в майбутньому. Щоб потім про них не забути, в таких місцях можна
залишати коментарі, передуючи їх токеном TODO з двокрапкою:
// TODO: тут потрібно оптимізувати код
Тоді всі коментарі, на початку яких стоїть TODO, виводитимуться в одному вікні Task List.
Для відображення таких коментарів у списку, що випадає, у цьому вікні виберіть
"Comments".Коментарі з усіх файлів проекту збиратимуться в одному місці. Подвійний клік
на будь-який з рядків у цьому списку відразу переносить вас у відповідне місце у коді. Такий
собі план розробки, якщо немає інших більш пріоритетних завдань.Інші коментарі, подібні
до TODO
TODO – зміна, яку необхідно внести в майбутньому, але не обов'язково для надсилання
продукту. Зазвичай це очищення коду або рефакторинг коду
BUG - наведений нижче код містить помилку
HACK - наведений нижче код є тимчасовим вирішенням існуючої проблеми
FIXME - наведений нижче код не працює за призначенням та потребує
виправлення.Виберіть у Visual Studio меню Tools - Options - Environment - Task List. Там ви
побачите список усіх доступних за замовчуванням токенів, а також можете додати свої. Для
кожного токена можна задати один з трьох пріоритетів (має сенс при великій кількості
коментарів): низький (у списку буде відображатися як синя стрілка вниз), середній (ніякої
піктограми не відображається) і високий (червоний знак оклику).
(https://learn.microsoft.com/ru-ru/visualstudio/mac/task-comments?view=vsmac-2022)Хочу
зауважити, що подібний функціонал підтримує будь-яке сучасне середовище розробки, будь
то Eclipse або IntelliJ Idea. Причому буває навіть не обов'язково писати todo великими
літерами і не потрібно ставити двокрапку.
// todo виправити найближчим часом
Коментування коду - // TODO: задокументировать каждую функцию
- https://learn.javascript.ru/comments
Іноді при написанні коду вам необхідно буде забезпечити його поясненнями,
//
##========================================================================================
// ##
##
// ## Put update categories
##
// ##
##
//
##========================================================================================
1. Callback
Що таке колбеки - "У функції, які виконують будь-які асинхронні операції, передається
аргумент callback - функція, яка буде викликана після завершення асинхронної дії"
коли вони використовуються? - коли є «асинхронність» (коли якийсь процес буде завершено
не зараз, а потім)
function НазваФункції (аргументи, callback) {
......(якийсь код)
}
Тепер робота із самою функцією колбека
function НазваниеФункции (аргументы, function(error, data) {
if (error) {
// обробляємо помилку
} else {
// успішно виконано
}
});
такий підхід називається "колбек з першим аргументом-помилкою" ("error-first callback").
Правила такі:
Перший аргумент функції callback зарезервований помилки. У цьому випадку виклик має
такий вигляд: callback(err).
Другий та наступні аргументи — для результатів виконання. У цьому випадку виклик має
такий вигляд: callback(null, result1, result2…).
Одна і та ж функція callback використовується і для інформування про помилку, і передачі
результатів.
тепер те, як це виглядає стосовно вашої 1 дз і до першої функції
function listContacts() {
fs.readFile(contactsPath, (err, data) => {
if (err) return console.error(err.message);
console.table(JSON.parse(data.toString()));
});
}
це якщо ми збираємося в основному файлі просто викликати функцію listContacts()
Якщо ви хочете повернути дані і вже в основному файлі та обробити та вивести їх у
консоль, то
function listContacts() {
fs.readFile(contactsPath, (err, data) => {
if (err) return console.error(err.message);
return data;
});
return JSON.parse(list);
}
тоді в основному файлі ви можете викликати listContacts().then(data =>
console.table(data)___________________________________________
2. Promises
Потім еволюція дійшла до промісів
const fs = require('fs').promises
1. Код, якому треба зробити щось асинхронно, створює об'єкт promise та повертає його.
promise.then навішує обробники на успішний результат чи помилку
Якщо черговий then повернув проміс, то далі по ланцюжку буде передано не сам цей
проміс, а його результат.
Якщо then повертає проміс, то до його виконання може пройти деякий час, частина
ланцюжка, що залишилася, буде чекати.
Тобто логіка досить проста::
Зверніть увагу
тут застосований стиль з колбек функцій, async/await і так само конструкція try/catch для
вилову помилок, - це надмірно.
Чому -
1) Почнемо з if(err) return console.log(err.message); - тут спірна конструкція -
console.log(err.message) - не може бути повернутий з if через директиву return, тому що буде
виконаний, як тільки буде викликаний, значить у return - нічого не потрапить і в const
response - буде присвоєно - undefined . Отже, ми не отримаємо очікуваної помилки, а
отримаємо у відповідь undefined, який і повернемо далі. Тут було б правильніше просто
повернути помилку if (err) return err.message;
Тепер у нас конструкція
try {
const response = await fs.readFile(contactsPath, (err) => {
if (err) return err.message;
});
let contacts = JSON.parse(response);
return contacts;
} catch (err) {
console.error(err.message);
}
2) fs.readFile(contactsPath, (err) => {
if (err) return err.message;
}); - це функція колбека, тому що є очікування відповіді, після того, як буде виконана
функція, і в функцію, яка повертає значення, в даному прикладі ми очікуємо тільки помилку
- (err) => {
Але є вказівка на директиву - await перед await fs.readFile - яка призведе до того, що
частина, яка відноситься до колббек функції, не буде виконана і буде проігнорована. Тому
що якби цей коллбек працював, то без явного повернення з нього значення response, у
змінну const response нічого не присвоїлося б. Тобто якби тут працював колббек, то функція
мала б виглядати ось так.
try {
const response = await fs.readFile(contactsPath, (err, data) => {
if (err) return err.message;
return data;
});
let contacts = JSON.parse(response);
return contacts;
} catch (err) {
console.error(err.message);
}
Але оскільки відбувається присвоєння результату читання файлу в змінну - const response =
await fs.readFile(contactsPath, то це означає, що частина з колбеком просто ігнорується і
означає обробка помилки
(err) => {
if (err) return err.message;
}
Ніколи не буде викликана і ніколи не оброблятиме помилку, і значить її можна видалити.
Після скорочення наш код вийде
try {
const response = await fs.readFile(contactsPath);
let contacts = JSON.parse(response);
return contacts;
} catch (err) {
console.error(err.message);
}
По поліпшенням/оптимізації до 1 ДЗ:
Починаючи з другої домашньої роботи, додайте мене, будь ласка, в колаборатори - мій нік
на гіт-хабі - NadyaHristuk
Навіщо мене додавати в колаборатори - така умова здачі ваших робіт з курсу Node.js
- https://github.com/goitacademy/nodejs-
homework______________________________________________________________________
Доброго дня! Якщо я сьогодні не своєчасно прийняла дз, то вибачаюсь. Також могла
забути злити гілки. Вибачте за незрочності, ящо я прийняла дз, то злийте гілки самі.
1
October 24th, 2022
3 replies
Last reply 2 months agoView thread
October 25th, 2022
2 replies
Last reply 2 months agoView thread
Починаючи з другої домашньої роботи, додайте мене, будь ласка, в колаборатори - мій нік
на гіт-хабі - NadyaHristuk
Навіщо мене додавати в колаборатори - така умова здачі ваших робіт з курсу Node.js
- https://github.com/goitacademy/nodejs-
homework______________________________________________________________________
при валідації контактів, які приходять до вас для оновлення, необхідно переконатися, що до
вас прийшло хоча б одне поле на оновлення
const schemaUpdate = Joi.object({
name: Joi.string()
email: Joi.string()
phone: Joi.string()
}).min(1) - треба дописати - .min(1) - що мінімально прийде хоча б одне поле на оновлення
______________________________________________
const schemaUpdate = Joi.object({
name: Joi.string()
email: Joi.string()
phone: Joi.string()
})
.or("name", "email", "phone") що мінімально прийде хоча б одне поле на оновлення
.or("name", "email", "phone") або .min(1); - робить одне й те саме.
___________________________
Node.js + Joi, як відображати власні повідомлення про помилки?
firstName: Joi.string().message("Your custom message")
якщо необхідно більш спеціалізоване форматування помилки
- ось приклад як робити контекстно-залежне шаблонування / форматування повідомлень,
export const categorySchema = Joi.object({
mobile: Joi.string().trim().regex(/^[6-9]\d{9}$/).required().messages({
"string.base": `"" should be a type of string`,
"string.empty": `"" must contain value`,
"string.pattern.base": `"" must be 10 digit number`,
"any.required": `"" is a required field`
}),
password: Joi.string().trim().required().messages({
"string.base": `"" should be a type of 'text'`,
"string.pattern.base": `"" must be 10 digit number`,
"any.required": `"" is a required field`
}),
}).required();
Використання шаблонів
https://github.com/hapijs/joi/blob/master/lib/types/string.js#L688 тут надан перелік варіантів того, як
можно формувати помилку.
Малюночок
GitHub
joi/string.js at master · hapijs/joi
The most powerful data validation library for JS. Contribute to hapijs/joi development by creating an
account on GitHub. (47 kB)
https://github.com/hapijs/joi/blob/master/lib/types/string.js#L688
(493 kB)
https://miro.medium.com/max/700/1*ewb86Z_1_DyB-rnyPhd_aA.png
9:55
_______________________________________________________________________________
Якщо вам складно і погано дається в розумінні як зробити 2 дз - може вам допоможуть ці
посилання
https://lo-victoria.com/build-a-rest-api-with-nodejs-routes-and-controllers
https://developer.mozilla.org/ru/docs/Learn/Server-side/Express_Nodejs/routes
https://metanit.com/web/nodejs/7.1.php
https://monsterlessons.com/project/lessons/express-router
Articles by Victoria Lo
Build a REST API with Node.js: Routes and Controllers
Hello friends! Welcome to the 2nd article of the Let's Build a Node.js REST API Series! In this article, we
will continue from where we left off in Designing and Planning your API and start creating some routes and
controllers for our T-API! What are... (48 kB)
https://lo-victoria.com/build-a-rest-api-with-nodejs-routes-and-controllers
developer.mozilla.org
Учебник Express часть 4: Маршруты и контроллеры - Изучение веб-разработки | MDN
В этом уроке мы настроим маршруты (код обработки URL) с "фиктивными" функциями-
обработчиками для всех конечных точек ресурса, которые нам понадобятся на веб-сайте
LocalLibrary. По завершении мы получим модульную структуру для нашего кода обработки
маршрута, который будет расширен реальными функциями-обработчиками в следующих статьях. У
нас также будет хорошее понимание того, как создавать модульные маршруты с помощью Express!
https://developer.mozilla.org/ru/docs/Learn/Server-side/Express_Nodejs/routes
metanit.com
Node.JS | Паттерн MVC. Контроллеры
Паттерн MVC в Node.js, основные компоненты, определение системы маршрутизации и
контроллеров
monsterlessons.com
Express router
В этом уроке мы реализуем добавление, обновление и удаление наших исполнителей с помощью
express router. Также мы познакомимся с такой полезной утилитой как Postman.
9:55
________________________________
Morgan, що за звір?, І з чим його їдять.
const logger = require('morgan')
morgan бібліотека для логування. Вона підключається як прошарок (middleware)
const formatsLogger = app.get('env') === 'development' ? 'dev' : 'short' - дозволяє виводити
логування або у варіанті 'dev' 'short' - залежно від стадії розробки перевірка -
'development' чи ні.
app.use(logger(formatsLogger))
Що таке логування - коли ви будете робити до вашого API (це ваш сервер) запити через Постмен, то
в консолі, ви будете бачити, що ось такого типу
info: ::1 - - [16/Feb/2018:12:37:44 +0000] "GET /logout HTTP/1.1" 200 34 "-" "Mozilla/5.0
(Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132
Safari/537.36"
timestamp=2018-02-16T12:37:44.421Z
І ось ця інформація і називається – логування
У чому сенс - ми робимо запит, запит проходить через цей прошарок, і цей прошарок надсилає в
консоль інформацію про запит - коли, яка, на яку адресу, який код відповіді. Або повідомляє, що
сталася помилка
Для чого це треба? Тому що тут ви самі собі надсилаєте запити. Але зазвичай ви на сервері просто
бачите, як користувачі з різних точок світу надсилають запити на сервер, і ви бачите які запити
приходять, як їх багато, які відповіді - позитивні чи помилки. Це такий журнал спостереження за
роботою сервера. Що б потім, коли щось не так піде, ви піднімаєте такий журнал і дивіться, що ось
після запиту на такий-то роут, у такий час з такими параметрами - ваш сервер помер. Отже, там у
нас проблеми. Можна не в консоль писати, можна писати у файл
var accessLogStream = fs.createWriteStream(path.join(__dirname, 'access.log'), { flags:
'a' })
Якщо мене щось бентежить у конкретній роботі, то я стукаю до студента в особу і прошу саме
його вміст .env файлу, що підключиться до його бази, але таке буває рідко, зазвичай тільки якщо є
якісь помилки, які студент сам не може відловити, і я допомагаю з вирішенням помилок
Малюночок
(17 kB)
https://res.cloudinary.com/practicaldev/image/fetch/s--
a4ZCc_N0--/c_imagga_scale,f_auto,fl_progressive,h_420,q_auto,w_1000/https://dev-to-
uploads.s3.amazonaws.com/uploads/articles/zoxppuaoh6w2v8vll7qy.png
1
1:42
_______________________________________________________________
Архітектура додатків MVC та REST
я не знайшла так, щоб було добре описано в одному джерелі.
Проблема в тому, що часто пишуть такою мовою, щоб зрозуміти це, треба вже знати це - за цим
скіном 3 статті - якщо постаратися прочитати їх то, за ідеєю в голові зі шматочків, має сформуватися
уявлення про те, що хотіли цим сказати - MVC
- https://dev.to/eaetukudo/understanding-mvc-pattern-in-nodejs-2bdn - про архітектуру - модель,
уявлення, контролер - (добре і з прикладом коду, що і де має лежати за татками)
- https://habr.com/ru/company/ruvds/blog/333856/ - на прикладі абстрактних функцій
- https://ruseller.com/lessons.php?id=666 - тут проблема в тому. що вони на прикладі пхп
пояснюють, але я думаю буде зрозуміло
- https://metanit.com/web/nodejs/7.1.php - і на прикладі чистої ноди
____________
А ось тут тільки єдине місце, де не погано про рахітектуру – REST API
https://webdraftt.com/tutorial/nodejs/rest-api - загальна інформація
https://webdraftt.com/tutorial/nodejs/app-structure - а ось тут уже саме про архітектуру
____
Малюночок
1:43
_______________________________________________________________________
3 ДЗ - работа с БД - функции
Немного позанудничаю.
Если вы это уже поняли, то просто пропускаем и можно не читать. Но если вы не совсем
разобрались. То давайте разберемся с функциями
Функции обращения к БД в названии которых есть слово One - были созданы для работы с любыми
полями, но обычно с любым другим кроме поля _id.
Для работы с полем _id есть специальные функции в названии которых уже содержится слово ById
что позволяет немного сократить синтаксис обращения к БДНачнем с первого варианта который я
встерчала в некоторых дз -
findOne({ _id: id }) - тут вызывается функция - в названии которой используется - One - в этой
функции явно не указывается конкретное поле, по которому идет поиск в БД, по этому надо явно
указывать название поля _id и значение которое передается - id - ({ _id: id })
updateOne({ _id: id }, { token }) - тут тоже самое, в названии есть слово One и тут явно передается
название поля _id по которому идет поиск и потом явно передаешь значение этого поля id
findOneAndUpdate({ _id: id }, { subscription }, { new: true } ) - аналогично.
НО ЭТО ВСЕ МОЖНО УПРОСТИТЬ НА ЧУТЬ-ЧУТЬ
_____________________________________________________________
Что бы не передавать явно указанное название поля - _id можно использовать функции, в
названии которых уже содержится слово id. Это специальные - именованные функции для поиска по
полю id, а именно
Model.findById()
Model.findByIdAndDelete()
Model.findByIdAndRemove()
Model.findByIdAndUpdate()
тут везде явно указывается название поля, по которому будет производится поиск по базе данных
- ById
по этому тут можно сразу передавать значение по которому происходит поиск - в этом примере мы
его передаем в переменной - id
НО даже когда используются функции в названии которых уже явно указывается слово ById ,
по которому идет поиск в БД, все равно используется синтаксис, как будуд-то вызыватеся
функция с записью - One В двух ДЗ видела вот такую запись -
const result = await Contact.findByIdAndUpdate({ _id: contactId },
{ ...body },
{ new: true },
)
Вот ссылка на официальную документацию, где показывается, как передаются аргументы
- https://mongoosejs.com/docs/api/model.html#model_Model.findByIdAndUpdate
если вы используете findByIdAndUpdate достаточно сразу передавать id , не надо конкретизировать
какое поле вы передаете - { _id: id } - findByIdAndUpdate( id, ...body, { new: true } )
или если вы хотите явно указывать поле, по которому вы обращаетесь с БД, то можно
использовать findOneAndUpdate( { _id: id }, ...body, { new: true }) - и тут надо явно
указывать по какому полю мы ищем элемент.
____________________________________
И такая же ситуация и с функцией удаления.
const result = await Contact.findByIdAndRemove({ _id: contactId })
Вот ссылка на официальную документацию, где показывается, как передаются аргументы
- https://mongoosejs.com/docs/api/model.html#model_Model.findByIdAndDelete
findByIdAndRemove(id) - не надо передавать { _id: id }, вы и так уже объявили, по какому полю
ищитеhttps://miro.medium.com/max/648/1*iDvsmUwzZQxJSKdL0xzwIA.png
(25 kB)
https://miro.medium.com/max/648/1*iDvsmUwzZQxJSKdL0xzwIA.png
1:43
_______________________________________________________________
А еще вы уже "большие", и по этому -
А давайте вы начнете красиво оформлять сам файл Readme.md - Что значит красиво? - файл должен
содержать краткую информацию о том, что это за проект, как его запустить. и что он умеет делать -
на какие роуты каую информацию можно получить. Возможный пример
- https://github.com/HackerNews/API - не обязательно так красиво, но это что бы было куда
стремится.
https://medium.com/astrolabe/%D0%BA%D0%B0%D0%BA-%D0%BD%D0%B0%D0%BF
%D0%B8%D1%81%D0%[…]-%D1%85%D0%BE%D1%80%D0%BE%D1%88%D0%B8%D0%B9-
readme-159f88076b26
http://webdesign.ru.net/article/pravila-oformleniya-fayla-readmemd-na-github.html
https://www.makeareadme.com/https://www.freecodecamp.org/news/content/images/size/w2000/2021/04/
uide-to-writting-a-good-readme-file--1-.pngЭто не обязательно, только предложение
(544 kB)
https://www.freecodecamp.org/news/content/images/size/w2000/2021/04/uide-to-writting-a-good-readme-
file--1-.png
1:44
Нагадую на всяк випадок, як робити перевірку на валідний id -
module.exports = isValidId;
малюночок
(257 kB)
https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net
%2Fdn%2FpmLoC%2Fbtq0c2w0ca0%2FdlgBzs80mOqyn0EZ5xD5V1%2Fimg.png
1:45
____________________________________________________
Как работают функции обновления в Монгусе - #findOneAndUpdate и остальные?
"It means that if you update your documents by
#findOneAndUpdate you update document directly into DB"
(https://github.com/Automattic/mongoose/issues/1974)
По этому если вы уберете прослойку JOI, то не смотря на то, что у вас записаны правила для полей в
самой модели данных - ОНИ нЕ БУДУТ СРАБАТЫВАТЬ!
Методы обновления, не проверяют правильность передачи данных, просто записывают то, что
пришло ))
Как решить этот нюанс -
добавляем дополнительно
await User.updateOne(
.....
{ runValidators: true }
);
регулярно встречаю эксперемент - уберу прослойку, но у меня же есть - enum: ['starter', 'pro',
'business'] - и почему он при обновлении не срабатывает? - да, вот по этому НЕ надо убирать
прослойку и будет все стабильно )) Ну или убираем прослойку и получаем, что прийдет! Все в руках
творящего код )) и ошибки тоже ))
GitHub
Schema Enum restriction is not enforced upon updating. · Issue #1974 · Automattic/mongoose
Take this schema: Schema({ status : { type : String, enum : ['active', 'disabled'],
default : 'active' } }); If I attempt to create a document with status field different fr... (77 kB)
https://github.com/Automattic/mongoose/issues/1974
1:45
______________________
Как выложить проект с фронтом и беком на Хероку - How to deploy a React + Node app to Heroku
in 3 minutes without the command line - https://www.freecodecamp.org/news/deploy-a-react-node-app-
to/https://allma.si/blog/wp-content/uploads/2021/07/react-with-node-backend-1024x602.png
(393 kB)
https://allma.si/blog/wp-content/uploads/2021/07/react-with-node-backend-1024x602.png
1:46
______________________________________
Что в этом примере значит $set и для чего он нужен?
если кратко, то тут мы говорим про БАЗОВЫЙ модуль к MongoDB, а не Mongoose, то метод $set
позволяет обновлять не все поля в объекте, к которому обращаются, а только те, которые мы
указали. В примере на принтскрине в первом случае будет перезаписан весь объект с данными и там
будет создано только имя, а во втором случае будет заменено ТОЛЬКО значение имени. Но в
Mongoose, при обновлении все поля по умолчанию обворачиваются в $set - что бы не было
нечаянной перезаписи полей
[options.overwrite=false] «Boolean» By default, if you don't include any update operators in doc,
Mongoose will wrap doc in $set for you. This prevents you from accidentally overwriting the document.
This option tells Mongoose to skip adding $set.
Link to docs: https://mongoosejs.com/docs/api.html#model_Model.update
1:46
____________________________________________________
если есть желание углубится в ноду, - в предложенных курсах будет и то, что вам будут
инфу
https://www.youtube.com/watch?v=thWNUby1G3U&list=PLC3y8-
rFHvwhco_O8PS1iS9xRrdVTvSIz&index=2 - хороший курс, вот тут с 1 по 10 тему, это объяснение
https://www.youtube.com/watch?v=ob9qRQeajA0&list=PL0lO_mIqDDFX0qH9w5YQIDV6Wxy0oawet
И самое главное, что когда вы будете смотреть как кодят, на ноде у вас уже будет
намотренность, и вы будешь уже интуитивно понимать как называют переменные, и как
Необязательно всех авторов смотреть, я скинула нескольких, потому что обычно один
автор заходит и его подача материала, а другой не заходит и не подходит его подача
материала. Если все пересмотрите и будет скучно я Вам еще подкину, что
1. В этом контроллере НЕ надо искать в базе юзера, и НЕ надо потом доставать из него нужные
значения, НЕ надо брать токен и проверять на наличие, Не надо расшифровывать токен!!
ПОТОМУ что все это уже сделанно в прослойке авторизации!! Вам осталось только из объекта
пользователя достать нужные поля и отдать их в ответе.
const user = await User.findById(id);
if (!user || !user.token) {
next(Unauthorized(" Unauthorized"));
}
req.user = user;
Не надо делать лишние запросы к базе данных. Вы же этого пользователя уже в базе находили, и
поля все из него получили, и весь объект пользователя дальше прокинули. Так зачем дублируете
код?
значит вам достаточно написать вот так -
const currentUser = async (req, res) => {
res.json({
data: {
email: req.user.email,
subscription: req.user.subscription,
},
});
};
_____________________________________________________
А у меня есть вопросы к работе с контактами в 4 дз, когда у Вас уже есть прослойка аунтификации,
и каждый контакт привязан к конкретному пользователю.
При обращении к контактам - роуты для всех router.get("/", authenticate, и для создания конатакта -
router.post("/", authenticate, - защищены прослойкой аутнификации. Тут все хорошо. НО
А УДАЛЯТЬ, Редактировать - может вообще кто угодно!!! НЕТ ПРОСЛОЙКИ!!! а она должна
быть у ВСЕХ роутов. Потому что только ЗАРЕГЕСТРИРОВАННЫЙ пользователь это может
делать.
ок, а даже есть прослойка. то при запросе вы не добавляете расширение, что мы теперь используем
не findByIdAndDelete()
а надо использовать
findOneAndDelete({
contactId,
owner: _id,
});
или аналог для обновления
findOneAndUpdate(
{
contactId,
owner: _id,
},
и тогда можно будет удалить или обновить ТОЛЬКО те контакты. которые принадлежат этом юзеру.
А то так можно пройти аутнификацию и начать удалять и менять чужие контакты )))
_________________________________________
Иногда видела в коде вот такие примеры:
Иногда вижу вот такое - пример кода -
await User.findOneAndUpdate(contact, body);
const result = await User.findOne(contact);
почему не сделать это же самое, за одно обращение к базе, просто достави флаг, что бы сразу
вернулись обновленные данные?
сразу найти и обновить - https://mongoosejs.com/docs/tutorials/findoneandupdate.html
const result = await Contact.findOneAndUpdate(contact, body, {
new: true
});
____________________________
Заметила странность в запрос find вы добавляете только ОДИН параметр, по которому там
можно искать. в запрос find можно СРАЗУ передать все необходимые параметры в виде ключ -
значение!!!
а в коде я вижу часто вот такую реализацию - сначала ищем, а потом обычными методами
ДжаваСкрипта еще и фильтруем , почему сразу не добавлете этот ключ и значение в запрос?
const contacts = await Contact.find({ owner: _id }, "-__v", {
skip,
limit: +limit,
});
if (favorite) {
const favoriteContacts = contacts.filter(
(contact) => `${contact.favorite}` === favorite
);
return res.json(favoriteContacts);
}
https://mongoosejs.com/docs/api.html#model_Model.find - ссылка на документацию
const favoriteContacts = await Contact.find({ owner: _id, favorite }, "-__v", {
skip,
limit: +limit,
});
и все, он уже вернет, только те, которые принадлежат этому пользователю и у которых в поле
favorite нужное значение ))
November 13th, 2022
3 replies
Last reply 2 months agoView thread
November 17th, 2022
Nadiia Khrystiuk 12:53 PM
https://github.com/BogdanLyamzin/BC17-node.js/blob/master/lesson-10/auth-example/routes/api/
auth.test.js
____________________________________________________________________________________
Навеяно проблемами с созданиями тестов, как доп задания к 5 дз, у студентов.
Cейчас выскажу лично свое мнение, значит оно не обязательно правильное, но просто его выскажу -
цена тестировщика 1000 дол, цена разработчика - 3000, В моей практике обычно нанимают
девочку/мальчика тестировщика, который тыкает в ваш свагер, или код, и пытается его тщательно
поломать, ну и проверить а работает ли оно правильно. И так на каждый ваш чих он пытается это
все паламать. И фирме обычно дешевле держать отдельно тестировщика, чем заставлять меня
писать тесты ручками, обычно тратя на это столько же времени, сколько и на написание самого
кода. А если мы говорим про качественную работу. то я должна покрыть код где-то процентов на
70%. Значит я буду работать в два раза медленней на разработку нового функционала, потому что
половину своего времени я буду писать тесты. Итого, фирма мне оплачивает работу тестировщика
за 1500 дол, за 15 дней работы или 3000 за месяц ))). И я в роли тестировщика стою на 2000 дол
дороже чем обычный тестировщик. По этой причине мне почему-то не дают задание писать тесты.
Обычно это звучит как-то так - Вот когда у нас будет много времени свободного, мы обязательно
этим займемся. А второе, чем мы займемся, когда у нас будет много свободного времени - это
документация ))) Потому что на ее написание надо тоже тратить много времени.
В галерах типа Luxsoft, GlobalLogic, Soft Serve разработчики пишут тесты, потому что заказчик
платит
https://miro.medium.com/max/1400/0*6OSeUxUrmdCO6xFG.pngПримеры тестирования api и unit
тесты
тут без пояснений - но я надеюсь что станет немного может понятней
______________________________________________
Тесты api
https://github.com/NadyaHristuk/Node_homework/blob/master/tests/auth.i.test.js
https://github.com/NadyaHristuk/Node_homework/blob/master/tests/user.i.test.js
https://github.com/NadyaHristuk/Node_homework/blob/master/tests/accept.spec.js
( код не мой, честно надергала ))
____________________________________
Юнит тесты:
https://github.com/NadyaHristuk/Node_homework/blob/master/tests/dddd.js
https://github.com/NadyaHristuk/Node_homework/blob/master/tests/unit.spec.js
аналогично надергала кода
(64 kB)
https://miro.medium.com/max/1400/0*6OSeUxUrmdCO6xFG.png
2 replies
Last reply 2 months agoView thread
November 20th, 2022
1. Личный емейл, который вы используете для рассылки, лучше в целях унификации кода, ну что бы
не искать где этот емейл в коде, и для безопасности, не светить личные данные - лучше вынести в
файл .env
const sendEmail = async (data) => {
const email = { ...data, from: "XXXXXXX@gmail.com" };
try {
await sgMail.send(email);
} catch (error) {
throw new Error();
}
};
2. Так же лучше вынести в переменные окружения имя хостинга, где вы ожидаете получение
письма, потому что локально это https:localhost:3000 а если это хостинг на хероку или еще где-то,
то тут вы возможно забудете в коде поменять это значение на нужное и получите ошибку. По этому
порт вместе с хостом лучше вынести в переменные окружения - .env
const mail = {
to: email,
subject: "Please, confirm you email",
html: `<a href="https:localhost:3001/api/users/verify${verificationToken}">Confirm</>`,
};
https://encrypted-tbn0.gstatic.com/images?
q=tbn:ANd9GcQrUDM_M1ZC9nSwbw1544hw7XVEHkIGuzZ2uQ&usqp=CAU
(5 kB)
https://encrypted-tbn0.gstatic.com/images?
q=tbn:ANd9GcQrUDM_M1ZC9nSwbw1544hw7XVEHkIGuzZ2uQ&usqp=CAU
8:37
______________________________________________________
Якщо у Вас виникли проблеми з SendGrid
Значить SendGrid з якоїсь причини вважають ваш обліковий запис не безпечним, у них дуже
дивна система безпеки. І з цієї причини вимагають звернутися до служби підтримки для
підтвердження вашої особистості. Зазвичай такі звернення можуть розглядатися більше тижня
в SendGrid.
Що я можу запропонувати:
1
December 11th, 2022
https://indigo.co.ua/blog/no-problem-kak-proyti-sobesedovanie-na-angliyskom
https://englishprime.ua/uk/kak-podgotovitsya-k-intervyu-na-anglijskom-yazyke/
https://dou.ua/lenta/articles/interview-in-english/
https://www.youtube.com/watch?v=iqeghm8Uut8
https://www.youtube.com/watch?v=UkSfp3XHSko
https://www.youtube.com/watch?v=vHJzSpgzRnU
https://www.youtube.com/watch?v=B-NTMyv1I7Q
__________________________________________
Печатаю с разрешения автора:
"Ivetta Dashkova
Ребят, кто переживает за английский. Да, почти в каждой вакансии будет написано требование
Английский язык среднего уровня, помнится, 5 лет назад я искала секретаря в нашу Киевскую
юридическую компанию, там тоже нужен был английский)))угадайте сколько раз она пользовалась
Безкоштовні онлайн-сервіси для вивчення мов для українцівБагато мовних курсів стали
безкоштовними для українців у період війни з рф. Нижче є список на вибір.
Важливо: під час реєстрації вказуйте українську як рідну мову, щоб отримати доступ
https://www.lingohut.com/uk (понад 45 мов, 125 уроків вивчення корисної лексики без попередніх
3 2
Катерина Кравченко 10:41 AM
@channel Друзі, всім привіт)
Нагадую, що сьогодні у нас планування проекту Далі ви вибираєте в групі Team Lead та
Scrum Master.
Також ви познайомитеся з ментором і проведете планування проектної роботи: і потім між
собою розподіляєте завдання на проект, а саме хто що буде робити і за що відповідати.
Коли ви поділили обов'язки, Team Lead пише ментору в особисті повідомлення: список команди і
хто за який функціонал відповідатиме.
безпосередньо тому студенту, який не брав участь, а не всій команді) Ролі, для кращого
розуміння, хто відповідає! Team lead. Стежить за технічною реалізацією проекту, відповідає
за якість коду, пише код ревью та завдання щодо проекту для учасників команди. Є власником
репозиторію за командним проектом. Безпосередньо спілкується з проектним ментором з питань
реалізації проекту і проблем, що виникають у команди.
Scrum master. Регулює термін виконання проекту. Здійснює щоденний Stand Up для
планування роботи команди. Для проведення Stand Up можна використати Google Meet, Zoom,
Skype, Discord. Слідкує за наявністю завдань у всіх учасників команди та термінами їх реалізації.
Безпосередньо спілкується з проектним ментором з питань планування та термінів виконання
о 19:30 з Іветтою Дашковою - ментором, який буде допомагати вам по частині frontend
та о 20:30 з Надією Христюк, ментором, яка буде допомагати з частиною backend
Привіт
@channel Всім привіт мене звати Іветта і я Ваш ментор з частини FrontEnd найближчі 2
тижні
Розкажіть, яке відчуття після пройденого шляху? Налаштовані робити крок у велике майбутнє?
Можливо, хтось з Вас вже працює в IT? Вже були на яких-небудь співбесідах?
Ну і авжеж чекаю всіх сьогодні о 19:30 на плануванні Прохання при собі мати щось
9 replies
Last reply 20 days agoView thread
1 reply
19 days agoView thread
2 replies
Last reply 20 days agoView thread
2
Ivetta Dashkova 8:30 PM
@channel FRONTEND
1. Для приведення коду до більш-менш однакового стилю не забудьте:
- встановити prettier + husky + lint.
- організувати структуру проєкту (https://alexkondov.com/tao-of-react/)
- домовитись про однакові стилі, import/export
- встановити на початку modern-normalizeРесурси для роботи на проєкті
1. Робота з формами та їх валідація
https://formik.org/docs/api/useFormik + https://formik.org/docs/guides/validation
2. За допомогою бібліотеки дані скорочуються до …, якщо не вистачає місця (за потреби)
https://www.npmjs.com/package/react-ellipsis-text
3. Деплой на Netlify через термінал
https://www.youtube.com/watch?v=qPfItwA4GD4
https://drive.google.com/file/d/1_mFfA_jdOfTgtwOtEE6hsuo6U95hZU45/view
https://drive.google.com/file/d/1sUdq5187Uf5uo5EfqPrEEE52ssPj11Xh/view
https://drive.google.com/file/d/1RXumPAthh_qJSp6hr6ImwF5ljRvWE47e/view
https://drive.google.com/file/d/1cTg_FOfymCJdC5_DLyo1l8-_ePNdBryZ/view
4.Компонент дати з календарем
https://www.npmjs.com/package/react-datetimeДодаткові фічі
Mультимовність:
https://www.i18next.com/
Google-кнопка авторизації (по frontend на 9-10й хвилині)
https://www.youtube.com/watch?v=oQaoymCOW8o
https://github.com/NadyaHristuk/lesson-swagger-googleOAUTH2Лайфхакі
Зручне розширення VSCode для роботи з гілками репозиторія - Git Graph
- 09:00 - 14:00
- 16:00 - 21:00
3
9:48
https://us05web.zoom.us/j/81835466950?pwd=djlUNWZ5ZzlzOXFnOSsyUDN5T0lDZz09
9:49
прохання всіх зайти в зум силка вище (edited)
Andrii Beha 10:01 PM
Оберіть варіант який вам подобаєтсья більше.
Як ми будемо писати наш проєкт.
2 5
1 reply
19 days agoView thread
3 replies
Last reply 19 days agoView thread
Olena 10:13 PM
diachenkoelena2@gmail.com
10:13
+380638876698
5 replies
Last reply 19 days agoView thread
Olena 10:43 PM
Як стилізувати будемо?
1 reply
19 days agoView thread
Привет, команда!
Марія 1:04 PM
myklush@ukr.net
1:07
0673450324
Google - як це робити
NadyaHristuk/lesson-swagger-googleOAUTH2
Stars
2
Language
JavaScript
Added by GitHub
Pinned by Kateryna Klimchuk
2 replies
Last reply 19 days agoView thread
3 replies
Last reply 19 days agoView thread
Olena 8:14 PM
ElenaDiachenko
Olena 9:18 PM
доступ до БД?
4 replies
Last reply 19 days agoView thread
Vovk Oksana 9:20 PM
https://github.com/OksanaVovk
Repositories
32
Added by GitHub
Olena 9:32 PM
Я не бачу схем в трелло...
Марія 11:45 AM
https://github.com/MariiaLutska
MariiaLutska
Repositories
32
Added by GitHub
December 17th, 2022
This message was deleted.
1 reply
17 days agoView thread
nadina00 4:21 PM
left проект-команда-6. Also, Alex Bosak joined.
December 19th, 2022
@channel Всім привіт Кажіть, як Ваші справи? Чи з’явились в команди до мене якись-небудь
питання? Як загалом проєкт і взаємодія з QA?
15 replies
Last reply 10 days agoView thread
December 26th, 2022
@channel Всім привіт вже бачила Ваш захист в запису, Ви круті!!! Пишаюся Вами і хочу
Вас привітати, колеги) Як каже Притула, ЦЕЙ ДЕНЬ НАСТАВ ! Бажаю Вам поскоріш знайти свою
Message проект-команда-6
Катерина Кравченко 10:52 AM
ВАЖЛИВА ІНФОРМАЦІЯ:
Правила використання Slack залишаються незмінними:
У каналі #random ви можете спілкуватися з усіх питань, домовлятися про зустрічі або
просто кидати смішні картинки пов‘язані з програмуванням)
Любі розробники, прошу вас не розслаблятися і також успішно завершити цей блок)
Обіймаю
Бережіть себе
4 1 1
9
October 19th, 2022
Commerce.
Локація - Чернівці(офіс)
Ключові вимоги:
- HTML, CSS
- JavaScript
- Git
- Адаптивна верстка
- Володіння WordPress, Bootstrap буде додатковим плюсом
online stores Our team of certified developers delivers awesome solutions to our
clients. (123 kB)
https://elogic.co/
1
October 20th, 2022
Катерина Кравченко 11:25 AM
@channel Народ, привіт)
Час: в 19:30
4
October 21st, 2022
S76hJ4C1dmjMV_XCJJdOZbMT.pCunky0BXsbX23Uk?startTime=1666283099000
Посилання YouTube: https://youtu.be/f3GpoL4FYR0 (запис YouTube в режимі
обробки)Спокійного дня
YouTube | GoIT
NODE JS 48 Модуль1. Заняття 2(20/10/2022)
@channel Всім привіт Запис заняття FSON 48 кар’єрна консультація - уже доступний
Посилання
ZOOM: https://zoom.us/rec/share/S8ho4XoXHTHe5G67ngxQfEdj6U8iTDcIOJeIRHfLdtt9o_aVXV
MRZ5P8vrMnMOWq.TN6VwGikvghjRHM8?startTime=1666367770000 Посилання
YouTube: https://youtu.be/auAkvA1pTzk (запис YouTube в режимі обробки)Спокійної
ночі
YouTube | GoIT
FSON 48 кар'єрна консультація
4 replies
Last reply 2 months agoView thread
October 24th, 2022
Час: в 19:30
6n1fCb5lz6SQmvZBoZ.c39A8lYL9mUrzvkq Посилання
YouTube: https://youtu.be/JWs0KNv8kP8 (запис YouTube в режимі обробки)Спокійної
ночі
YouTube | GoIT
NODE JS 48 Модуль2. Заняття 1(24/10/2022)
7
October 27th, 2022
Час: 19:30
Посилання на заняття: https://zoom.us/j/91599707031?
pwd=dGY2M1VFNC84Q3pac0RUaHYxSEtKQT09
lBdk9OTi6eN-CKNYtJIfEzMSSaouSCyYWnMjg8kW6YEGE.pex2jWwhmKqkRiDq
Посилання YouTube: https://youtu.be/gl2x6-WZ9p4 (запис YouTube в режимі
обробки)Спокійної ночі
YouTube | GoIT
NODE JS 48 Модуль2. Заняття 2(27/10/2022)
2
October 31st, 2022
@channel Всім привіт! Рухаємось далі, залишилось ще трішки, тому запрошую вас
Час: в 19:30
Посилання на заняття: https://zoom.us/j/95866469892?
pwd=am43YTFURFNFL2h4YWJJQjVLaXZhUT09
Бережіть себе
11 2
November 1st, 2022
EPAM.
Якщо ти хочеш отримати сертифікат від EPAM, створити власний додаток та поповнити
своє портфоліо - тоді цей марафон саме для тебе!
На учасників чекає:
- 12 занять, на яких ви покроково пройдете етапи розробки проєкту
- 10 експертів ЕРАМ, які будуть ділитися практичними знаннями та досвідом
- 2 тижні інтенсивного навчання
- розробка проєкту для вашого портфоліо
Старт: 7 листопада
Участь: безкоштовна
4
November 2nd, 2022
Час: в 19:30
Але звісно що щира оцінка "10 з 10" для нас також є МЕГА цінною
@channel розраховую на вашу активність до цієї задачки, тімліди - буде круто якщо
найкрутішу команду
вийде
YouTube | GoIT
Був логістом, став програмістом. React Developer в Shark Software. Станіслав Чехов
linkedin.com
Sign Up | LinkedIn
500 million+ members | Manage your professional identity. Build and engage with your
professional network. Access knowledge, insights and opportunities.
linkedin.com
Sign Up | LinkedIn
500 million+ members | Manage your professional identity. Build and engage with your
professional network. Access knowledge, insights and opportunities.
November 3rd, 2022
@channel Всім привіт Запис заняття NODE JS 48 Модуль3. Заняття 1 - уже доступний
Посилання
ZOOM: https://zoom.us/rec/share/ULXi6lyHvRuPzK8dsDdSyEPW67llJT1OXc_D4TCIj4bDYF_GZ
lxvx3IXARR5w5yU.AkIRkDbgmTybL-oQ?startTime=1667409957000 Посилання
YouTube: https://youtu.be/Gbt57M0sTiM (запис YouTube в режимі обробки)Спокійної
ночі
YouTube | GoIT
NODE JS 48 Модуль3. Заняття 1
Час: в 19:30
6
November 4th, 2022
@channel Всім привіт Запис заняття NODE JS 48 Модуль3. Заняття 2- уже доступний
yVD5Z_wiZOuASQSvZ0WisqSRhdZhkLAaIc.jz7MyWlcLut9KEw3 Посилання
YouTube: https://youtu.be/QSVTUciRd3g (запис YouTube в режимі обробки)Спокійної
ночі
YouTube | GoIT
NODE JS 48 Модуль3. Заняття 2
https://t.me/ua_working
https://t.me/Job_IT_Junior
https://t.me/happymonday
https://t.me/workadojobs
https://t.me/jobzilla_ua
Якщо маєте індивідуальні питання до кар’єрного консультанта, пишіть запит на
пошту careerservice@goit.ua
6
November 7th, 2022
Коли: 19:30
Пароль: goit
3 replies
Last reply 2 months agoView thread
November 8th, 2022
chm goit 1:30 AM
@channel Всім привіт Запис заняття [FSon48] Модуль 4. Урок 1 - Аутентифікація - уже
UK43qS33PVMeeiGTcszFZC8H4oltRxj3HA50RW41S8RO5-.dTe1VwlPbzRVEGRp Посил
ання YouTube: https://youtu.be/vFxy2ZW0WPk (запис YouTube в режимі обробки)Спокійної
ночі
YouTube | GoIT
[FSon48] Модуль 4. Урок 1 - Аутентифікація
6
Pinned by Катерина Кравченко
ця зустріч якраз для вас!План зустрічі: Поговоримо про різницю між традиційним
програмуванням та ML.
уважність та трохи пригадати шкільний курс алгебри (але зовсім трохи). 08 листопада
(сьогодні)
@channel Друзі, ми збираємо 1 000 000 грн для дітей, які постраждали від війни.
Наша перша задача: київський медичний центр «Джерело».
В ньому безплатно приймають на реабілітацію до 50 дітей з усіх регіонів України щомісячно.
Дехто з дітлахів втратив батьків та дім, а зараз вимушений спати в підвалі на картонці
під час повітряних тривог. Ми хочемо придбати для них двоповерхові ліжка, матраци,
Starlink, їжу, дизель та пелети для обігріву. Ці кошти допоможуть
облаштувати не один, а декілька реабілітаційних центрів. І у тисячі малюків буде шанс
Також, думаю ви вже бачили нову ачівку в LMS, тож можна донатити одразу там
send.monobank.ua
Безпечний переказ коштів
Надсилайте безкоштовно та безпечно кошти
4 replies
Last reply 2 months agoView thread
November 10th, 2022
Коли: 19:30
Пароль: goit
7
November 11th, 2022
YouTube | GoIT
[FSon48] Модуль 4. Урок 2 - Аутентифікація
країні мають бути сильні спеціалісти, якими ми з вами вже стаємо Я повернуся
12
November 12th, 2022
фідбек
2
November 14th, 2022
Коли: 19:30
Пароль: goit
2
November 15th, 2022
4
November 16th, 2022
QL94M29VF07e_K49HKlbl0al7Ah9G.yFDLUcN50NR0BkJ8?startTime=1668446979000
Посилання YouTube: https://youtu.be/s13AjO7OzTM (запис YouTube в режимі
обробки)Спокійної ночі
YouTube | GoIT
[FSon48] Модуль 5. Урок 1 - Робота із зображеннями. Тестування
November 17th, 2022
Як ваш настрій? Дуже сподіваюсь, що з вами все добре і ви в безпеці Чекаємо вас
сьогодні на занятті:
Пароль: goit
2 replies
Last reply 2 months agoView thread
November 18th, 2022
kWmNOxjLHrukJO_.WlnriPS0Xw1qXjg3?startTime=1668705780000 Посилання
YouTube: https://youtu.be/73eUJZjH8kQ (запис YouTube в режимі обробки)Спокійної
ночі
YouTube | GoIT
[FSon48] Модуль 5. Урок 2 - Робота із зображеннями. Тестування
рухатися далі
Бережіть себе
g33j.gif
9 3
November 21st, 2022
@channel Привіт
труднощами та дійдемо до бажаної мети, головне пам‘ятайте заради якої цілі ви тут
Ми побудували з вами чудову команду, з якою дуже приємно працювати, тому завжди
Пароль: goit
@channel Всім привіт Запис заняття [FSon48] Модуль 6. Урок 1 - Пошта. Вебсокети -
VmlHzgQ6my010mbiC.sGFaEOoDQqhQmx-O Посилання
YouTube: https://youtu.be/_IFcw57E5XU (запис YouTube в режимі обробки)Спокійної
ночі
YouTube | GoIT
[FSon48] Модуль 6. Урок 1 - Пошта. Вебсокети
6
November 24th, 2022
Попереду у вас додача ДЗ (у вас буде не один, а 2 тижні доздачі домашок, до 11.12
) та фінальний командний проект. Рада буду всіх вас побачити на ньому) Чекаємо
вас сьогодні на занятті:
Час: о 19:30
Пароль: goit
Час: о 19:30
Пароль: goit
1 6
November 25th, 2022
Vasyl Gendzeliuk 10:45 AM
@channel залив лекцію 12 на github
@channel Всім привіт Запис заняття [FSon48] Модуль 6. Урок 2 - Пошта. Вебсокети -
EC9?startTime=1669310753000 Посилання
YouTube: https://youtu.be/w9caV_uzcSI (запис YouTube в режимі обробки)Спокійної
ночі
YouTube | GoIT
"[FSon48] Модуль 6. Урок 2 - Пошта. Вебсокети"
Саме зараз ми будуємо нашу з вами історію Я бажаю кожному гарного, теплого та
мирного відпочинку Ви дуже круті, я вдячні всім вам за сміливість та стійку позицію
вчитися не дивлячись ні на що
А ми побачимось з вами у понеділок
1 reply
1 month agoView thread
November 29th, 2022
співбесіди
Вже завтра 30.11 о 19:30 у вас буде заняття на тему: “Peer-to-peer співбесіди”
Цей вебінар проведе автор курсу з підготовки до технічної співбесіди, Senior Front End
1 reply
1 month agoView thread
November 30th, 2022
Час: 19:30
Підключення: https://us02web.zoom.us/j/86001899493?
pwd=bXJwWFVzTnIzTTg5SWEzN3BWME1vUT09
Пароль: goit
Бережіть себе
2 2
December 1st, 2022
Pinned by Катерина Кравченко
майбутнє Для студентів, що вже доздали всі дз по Ноді, ми вас без роботи не
Отже, курс відкритий, також з цього тижні у нас є ментор Сергій Стахура
Якщо задаєте запитання і чекаєте відповідь ментора на нього то обов’язково тегайте
Сергія @grey4uk14 StakhuraДрузі, і нагадую регламент, якщо до дедлайну не будуть здані
всі ДЗ у термін:
1. Завершити навчання без принятих всіх дз. У такому разі у вас в сертифікаті буде вказано,
що блок ноду ви прослухали, адже немає всіх прийнятих ДЗ і проекту.
2. Поставити поки що навчання на паузу, якщо ви розумієте, що занадто багато всього на
вас впало. Це нормально, це життя і за весь курс будь-що може бути. Заморозка
здійснюється до 1 року і протягом цього часу ви будь-якої миті можете відновитися на
курс. Матеріали також залишаються. Ми будемо на вас чекати)
3. Відразу перейти в інший потік, який почав навчання пізніше нашого. Ви переходите на той
модуль, де була принята остання дз). У всіх 3-х випадках згорає гарантія повернення
коштів в разі непрацевлаштування протягом 6 місяців.
7 replies
Last reply 1 month agoView thread
December 14th, 2022
працевлаштування в ІТ
ставимо
- якщо вже працевлаштовані
- на стажуванні
2 2 35 11
2 replies
Last reply 20 days agoView thread
December 15th, 2022
@channel Всім привіт Запис заняття Технічний дзвінок Frontend. Проєкт 48 фсон - уже
BN3R1?startTime=1671038996000 Посилання
YouTube: https://youtu.be/7n_CDzptSNk (запис YouTube в режимі обробки)Спокійної
ночі
YouTube | GoIT
Технічний дзвінок Frontend. Проєкт 48 фсон
12:39
@channel Всім привіт Запис заняття Технічний дзвінок Backend. Проєкт 48 фсон - уже
доступний Посилання
ZOOM: https://zoom.us/rec/share/zgZEefPtUKpwPRLqLpJM6l0tynJ7VDCHMH9YAJYmL1ul214H
FkoU5ipGD8hC3l-b.iyRn1TPBSSNwJhTK?startTime=1671042756000 Посилання
YouTube: https://youtu.be/o1joxq_HEpQ (запис YouTube в режимі обробки)Спокійної
ночі
YouTube | GoIT
Технічний дзвінок Backend. Проєкт 48 фсон
December 22nd, 2022
Катерина Кравченко 4:50 PM
@channel Привіт)
нас усіх, ми змогли! Але знаємо, що серед вас є ще ті, хто в процесі пошуку роботи.
Бажаємо, щоб 2023 обов’язково вам приніс класний оффер, або замовлення на фрілансі!
фідбек
Slack
Команду презентує тімлід або скрам майстер або хтось інший з команди, якщо в
перших двох нема можливості провести презентацію;
рухатись далі
Пишаюсь вами, бережіть себе!
8
December 29th, 2022
Зум: https://zoom.us/j/96201578000?pwd=MmdMMTdReHFCVkF1cEUwMWcxVG42UT09
Пароль: goit
проект-команда-2
проект-команда-1
проект-команда-3
проект-команда-4
проект-команда-5
незламність
і я маю для вас декілька новин)
відправимо)
ATTENTION
мене крута плюшка! Не можу вас залишити без бонусів за такі приємності))
А також передаю в чат з Сашею Репетою, Андрієм Данилко, Василем Гендзелюком та
ви разом з нами
@channel Всім привіт Запис заняття FSon 48 Презентації проєктів - уже доступний
та неймовірну гордість бути поруч з такими людьми адже вас не зупинила ні війна, ні
постійні відключення електроенергії, і я впевнена, що вже немає такої перешкоди, яку ми з
здійсниться
Проведіть цей час з рідними, та дозвольте собі поринути в цю неймовірну
атмосферу казки Так заведено, що в кінці року всі підводять підсумки, тому
пропоную нам не відставати і також поділитись в коментарях успіхами та особистими
Час: 19:30
4 2
23 сентября 2022 г.
Посилання
Zoom: https://us06web.zoom.us/rec/share/gvGaH7QovuClTniPUmDyKQNWtQ9QmjOLNwhmkzNOWXj
sJ3i8Gjvk_myiViqrRgjz.2fCLcPBx5BzVK04O?startTime=1663864117000 Посилання
YouTube | GoIT
FSon 48 Модуль 6 Заняття 2 (22/09/2022)
3
26 сентября 2022 г.
Час: 19:30
6 1
обробки)Спокійної ночі
YouTube | GoIT
FSon 48 Модуль 7 Заняття 1 (26/09/2022)
2
27 сентября 2022 г.
Він займе не більше 3-5 хвилин, але дасть нам шанс почути вас і стати краще Бережіть себе
8
28 сентября 2022 г.
Час: 19:30
3 1
обробки)Спокійної ночі
YouTube | GoIT
FSon 48 Модуль 7 Заняття 2 (28/09/2022)
1
29 сентября 2022 г.
Катерина Кравченко 9:00
@канал Друзі, привіт)
Нас з вами друг і приклад для наслідування Олександр Репета потребує маленької нашої допомоги,
а саме надати свій фідбек по 11 та 12 заняттю програми Реакт
9
30 сентября 2022 г.
Springs
Локація- віддалено
Ключові вимоги:
- HTML, CSS
- JavaScript
- React.js/Node.js
Локація - віддалено
Ключові вимоги:
- JavaScript
- React.js
- Node.js
По закінченні стажування ви отримаєте рекомендаційний лист або трудовий договір від компанії.
Етапи рекрутації:
- виконати тестове завдання
- пройти HR співбесіду
- пройти тест на знання англійської
Тривалість - 3 місяці
Початок - 01.11.2022
Тема: Модуль 8
4 ответа
Последний ответ 3 мес. назадПосмотреть обсуждение
4 октября 2022 г.
@канал Всім привіт Запис заняття fson 48. Модуль 8 - уже доступний Посилання
ZOOM: https://us06web.zoom.us/rec/share/vxc5h8fsBUkgQo_uaGEmgb91Zgwx7e0bcDKKEOELVio-
AcRkaXOakiIXEWhMU8nU.Qc0t9E2ytqw9Hh-K?startTime=1664814545000 Посилання
YouTube | GoIT
fson 48. Модуль 8
Локація- віддалено
1
10 октября 2022 г.
Люблю
21 2
12 октября 2022 г.
Ноди
Я вірю в вас
Для студентів, які не встигли здати дз у термін, є кілька варіантів подій:
Піти далі з потоком без принятих всіх дз і у такому разі ви зможете доздати дз протягом
навчання на ноді, однак треба буде доплати 400 грн за МІСЯЦЬ перевірки ментором ваших дз. І
при випуску в сертифікаті буде написано, що у вас всі етапи - успішно пройдені.
Поставити поки що навчання на паузу, якщо ви розумієте, що занадто багато всього на вас
впало. Це нормально, це життя і за 10 місяців навчання будь-яке може бути. Заморозка здійснюється
на невизначенний термін і протягом цього часу ви будь-якої миті можете відновитися на курс.
Відразу перейти в інший потік, який починався пізніше нашого. Наприклад на 6-й, 5-й або
3-й модуль і т.д. Ви переходите орієнтовно на той модуль, де була принята остання дз)
Обійняла
10
2 ответа
Последний ответ 3 мес. назадПосмотреть обсуждение
14 октября 2022 г.
Тема: Модуль 8
3 2
5 ответов
Последний ответ 3 мес. назадПосмотреть обсуждение
15 октября 2022 г.
@канал Всім привіт Запис заняття Fson 48 19:30 - уже доступний Посилання
ZOOM: https://zoom.us/rec/share/yF4A-2Qrgjy9dpnAr6IQsA6aocem6KRuHgukLGW-
vyrmtLrevWvth0oXGOTmwjfw.Mq3SZOMVGHUvcXLj?startTime=1665765588000 Посилання
YouTube | GoIT
Fson 48 19:30
1
17 октября 2022 г.
Піти далі з потоком без принятих всіх дз. У такому разі у вас в сертифікаті буде вказано, що
блок реакту ви прослухали, адже немає всіх прийнятих ДЗ. Але ви зможете доздати домашки
протягом навчання на ноді, однак треба буде доплати 400 грн за МІСЯЦЬ перевірки ментором
ваших дз. І при випуску в сертифікаті буде написано, що у вас всі етапи - успішно пройдені. Якщо
ви не встигли завершити ваші завдання до дедлайну, це значить, що у вас автоматично знімається
гарантія повернення грошових коштів у разі непрацевлаштування.
Поставити поки що навчання на паузу, якщо ви розумієте, що занадто багато всього на вас
впало. Це нормально, це життя і за весь курс будь-що може бути. Заморозка здійснюється на
невизначенний термін і протягом цього часу ви будь-якої миті можете відновитися на курс.
Відразу перейти в інший потік, який починався пізніше нашого. Ви переходите на той
модуль, де була принята остання дз)І сьогодні чекаємо вас на першому занятті з Ноди
Коли: 19:30
Бережіть себе
4 ответа
Последний ответ 3 мес. назадПосмотреть обсуждение
18 октября 2022 г.
@канал Всім привіт Запис заняття NODE JS 48 Модуль1. Заняття 1(17/10/2022) - уже
1
19 октября 2022 г.
@канал Всім привіт! Вакансія Intern FrontEnd Developer від компанії Elogic Commerce.
Локація - Чернівці(офіс)
Ключові вимоги:
- HTML, CSS
- JavaScript
- Git
- Адаптивна верстка
- Володіння WordPress, Bootstrap буде додатковим плюсом
Навчання кілька годин на день, де компанія навчатиме технології Magento для подальшого
використання на проектах компанії. Вже після трьох тижнів є можливість перейти на
оплачуваний офер!
stores Our team of certified developers delivers awesome solutions to our clients. (123 КБ)
https://elogic.co/
2 ответа
Последний ответ 2 мес. назадПосмотреть обсуждение
20 октября 2022 г.
Viktoriia Shynkar 23:53
@канал Всім привіт Запис заняття NODE JS 48 Модуль1. Заняття 2(20/10/2022) - уже
nVzhbbsj4e-S76hJ4C1dmjMV_XCJJdOZbMT.pCunky0BXsbX23Uk?startTime=1666283099000
Посилання YouTube: https://youtu.be/f3GpoL4FYR0 (запис YouTube в режимі обробки)Спокійної
ночі
YouTube | GoIT
NODE JS 48 Модуль1. Заняття 2(20/10/2022)