Comics: It is not a bug, it is a feature!

Opublikowano: 19.03.2022 - tagi: JavaScript RxJS Operator Observable
Operator from zamienia podaną, w parametrze wartość w obiekt typu Observable.
Za pomocą tego operatora możesz stworzyć Observable z tablicy, Promise lub iterowalnego obiektu.
import { from } from 'rxjs';
const observable = from([1, 2, 3]);
observable.subscribe(value => console.log('value: ', value));
// Wynik:
// value: 1
// value: 2
// value: 3
W przypadku gdy jako parametr przekażemy ciąg znaków operator from potraktuje to jako tablicę znaków. Oznacza to, że każdy znak zostanie wysłany jako pojedyncza wartość.
import { from } from 'rxjs';
const observable = from('Hello');
observable.subscribe(value => console.log('value: ', value));
// Wynik:
// value: H
// value: e
// value: l
// value: l
// value: o
Jeśli przekażemy łańcuch znaków za pomocą tablicy, ten tekst zostanie przesłany jako jedna wartość:
import { from } from 'rxjs';
const observable = from(['Hello']);
observable.subscribe(value => console.log('value: ', value));
// Wynik:
// value: Hello
Za pomocą tego operator możemy zmienić Promise w Observable:
import { from } from 'rxjs';
const promise = new Promise(resolve => resolve('Some value'));
const observable = from(promise);
observable.subscribe(value => console.log('value: ', value));
// Wynik:
// value: Some value
Załóżmy, że mamy dokument HTML, który zawiera taką strukturę:
<h2>Some header 1<h2>
...
<h2>Some header 2<h2>
...
<h2>Some header 3<h2>
I chcemy pobrać treść z nagłówków h2. Przykład:
import { from } from 'rxjs';
const allH2 = document.querySelectorAll('h2');
const observable = from(allH2);
observable.subscribe(value => console.log('value: ', value.innerText));
// Wynik:
// value: Some header 1
// value: Some header 2
// value: Some header 3
Opublikowano: 15.03.2022 - tagi: JavaScript Angular Konfiguracja Proxy Backend Integracja
Angular udostępnia prosty mechanizm integracji Frontend'u z Backendem. Nazywa się proxy.
Załóżmy, że nasza aplikacja (frontend) działa na porcie: 4200. Mamy także backend, który działa na porcie: 3000. W tym przypadku mamy dwa różne porty, a to jest problem, ponieważ nie jesteśmy w stanie się odwołać do skryptu backendowego.
Ten problem możemy łatwo rozwiązać, konfigurując proxy.
Zanim opiszę jak to zrobić, najpierw kilka słów jak to działa. Proxy sprawia, że frontend, który działa na przykład na porcie 4200 będzie mógł się odwołać do backendu, który działa pod innym portem.
Czyli na przykład mamy backend takim API:
Za pomocą proxy będziemy mogli odwołać się do tego API na przykład tak: http://localhost:4200/api/getUsers.
Proxy możemy skonfigurować, w dwóch krokach:
Zwartość pliku: proxy.conf.json:
{
"/api/*": {
"target": "http://localhost:3000",
"secure": false,
"logLevel": "debug",
"changeOrigin": "true",
"pathRewrite": {"^/api": ""}
}
}
W polu target podajemy adres, pod którym działa nasz backend.
Dzięki takiej konfiguracji będziemy mogli we frontendzie wywoływać API, w taki sposób: http://localhost:4200/api/someEndpoint.
Teraz zedytujmy plik: package.json i w scripts dodajmy taką linijkę:
{
"scripts": {
"start": "ng serve --proxy-config proxy.conf.json"
},
}
To wszystko. Uruchamiamy backend i frontend:
npm run start
Mamy dostęp do backendu we frontendzie.
Uwaga: Tego sposobu używa się zwykle, w trybie development. Jeśli chodzi o wersję produkcyjną, to można stworzyć virtual host.
Opublikowano: 08.03.2022 - tagi: NodeJS MongoDB Mongoose Walidacja Dane Model JavaScript
Biblioteka Mongoose dysponuje kilkoma walidatorami, które określamy w modelu dokumentu:
const PersonSchema = new Schema({
name: { type: String, required: true },
age: { type: Number, min: 18 }
});
const PersonModel = mongoose.model('person', PersonSchema);
Spróbujmy zapisać model danych, który jest niepoprawny:
const noNamePerson = new PersonModel({ age: 16 });
try {
await PersonModel.create(noNamePerson);
} catch(error) {
console.log('error: ', error);
}
W tym przypadku zwróci błąd walidacji.
A co w przypadku, gdybyśmy chcieli sprawdzić poprawność danych przed ich zapisem?
Istnieje metoda validateSync, która poinformuje nas o ewentualnych błędach:
const noNamePerson = new PersonModel({ age: 16 });
const validateErrors = noNamePerson.validateSync();
console.log(validateErrors);
try {
await PersonModel.create(noNamePerson);
} catch(error) {
console.log('error: ', error);
}
Jeśli nie ma błędów zmienna validateErrors będzie pusta. W przypadku błędów walidacji zwróci obiekt, do którego można się dostać w taki sposób:
const validateErrors = noNamePerson.validateSync();
console.log(validateErrors.errors.title);
console.log(validateErrors.errors.age);
Opublikowano: 03.03.2022 - tagi: Produktywność Dyscyplina
Ile razy zaczynałeś prace nad własnym projektem, ale po jakimś czasie go porzucałeś? Ile razy byłeś zmotywowany do działania, a po upływie kilku dni odpuszczałeś? Dlaczego znowu się nie udało?
Jedną z odpowiedzi jest: bo brakowało Ci dyscypliny.
Jeśli zbudujesz dyscyplinę, nie będziesz musiał przejmować się tym, że masz zły dzień lub Ci się nie chce. Po prostu działasz.
Dyscyplina to plan działania. Jeśli go masz, wiesz czym się zająć i nie tracisz czasu na zastanawianie się.
Dyscyplina to rygor. Jeśli wiesz, co jest do zrobienia, to się tym zajmujesz. Sam narzucasz sobie ile czasu, zamierzasz poświęcić na zadanie.
Dyscyplina to nawyk. Kiedy wiemy, że zbudowaliśmy dyscyplinę? Jeśli zauważysz, że przystępujesz do pracy automatycznie, tak że weszło Ci to w krew.
Zbudowanie dyscypliny zajmuje czas. Trzeba to sobie uświadomić. Na początku jest najtrudniej. Jeśli wytrwamy, to zobaczymy tego wyniki.
Budowanie dyscypliny można porównać do efektu kuli śnieżnej. Na początku kula jest mała, ale z czasem nabiera rozpędu i się rozrasta.
Dlaczego warto budować dyscyplinę?
Przede wszystkim będąc zdyscyplinowanym, skupiasz się na tym, co jest do zrobienia. Masz jasno określone cele. Masz plan. Po prostu pracujesz.
Dyscyplina sprawdza się szczególnie przy celach długoterminowych. Pracujesz nad nowym projektem? Odchudzasz się? Nie polegaj na motywacji, ale zbuduj plan i go konsekwentnie realizuj. Motywacja przyda się na początku, ale szybko ucieknie. Wtedy do akcji powinna wkroczyć dyscyplina.
Nie mów: "Nie mam motywacji do tego", a skup się na: "Jeśli to jest dla mnie ważne, to powinienem pod to działanie zbudować dyscyplinę".
Masz gorszy dzień? Albo nie jesteś w nastroju? Co się stanie, jeśli sobie dzisiaj odpuścisz? Pewnie nic. Problem jest, wtedy gdy wybierając wymówki, tworzysz zły nawyk, który oddala Cię od wyznaczonego celu.
Polegając na dyscyplinie, podpisujesz kontrakt z samym sobą. W tym kontrakcie napisane jest: "Nie dla wymówek".
To, co chcemy osiągnąć. Pracujemy, żeby coś sensownego zrobić. Czasami zajmuję to trochę czasu. Jeśli skupimy się na pracy, efekty przyjdą szybciej, niż myśleliśmy.
Więc jak zbudować dyscyplinę?
Określ, co chcesz osiągnąć. Pod wyznaczony przez Ciebie cel będziesz budować dyscyplinę.
W tym kroku musimy odpowiedzieć sobie na pytania:
Czasami jest tak, że możemy określić z góry wszystkie zadania, które należy robić po kolei. Ale nie zawsze. Jeśli nie jesteś w stanie określić wszystkiego naraz, skup się na najbliższym zadaniu. Kiedy je skończysz, możesz zaplanować kolejne działania.
Jeśli zadanie jest zbyt ogólne, rozbij je na mniejsze — bardziej precyzyjnie określone.
Skoro wiesz, co jest do zrobienia i kiedy się tym zajmiesz, to sprecyzuj jeszcze, o której godzinie i ile czasu zamierzasz poświęcić na zadanie danego dnia. To jest bardzo ważne!
Na przykład:
Zamierzam pracować nad własnym projektem: w poniedziałek, środę i piątek o 17:00 przez 1 godzinę.
Uwaga: Pracując, w taki sposób nie mów sobie: "Dzisiaj zrobię to i to" - taki sposób myślenia jest błędny, ponieważ często jest tak, że nie przewidzisz przeszkód, na które napotkasz podczas pracy. Skup się na samym działaniu, a nie na rezultatach. Efekty przyjdą, ale potrzeba do tego cierpliwości. Dyscyplina polega właśnie na działaniu, a nie przewidywaniu.
To jest najważniejszy punkt. Dyscyplinę zbudujesz, jeśli podpiszesz się pod swoim planem i będziesz go realizować w wyznaczone dni o określonej godzinie i poświęcał na to daną ilość czasu.