NodeJS: Wczytywanie plików

Opublikowano: - tagi:

Żeby wczytać plik wystarczy nam moduł wbudowany w NodeJS o nazwie: fs. W tym wpisie podam przykłady dla dwóch metod, które pozwalają wczytać plik w sposób synchroniczny lub asynchroniczny. Warto także mieć na uwadze to, że opisane metody wczytują plik do pamięci. Jeśli zamierzasz wczytać duży plik będzie to miało negatywny wpływ na pracę programu. W takim przypadku warto zainteresować się strumieniami.

Synchroniczne wczytywanie pliku

Wczytywanie pliku, w sposób synchroniczny oznacza, że wątek główny zostanie zablokowany do momentu zakończenia tej operacji.

Posłużymy się metodą readFileSync:

const fs = require('fs');

try {
  const data = fs.readFileSync('./file-to-load', 'utf8');
  console.log(data);
} catch (error) {
  console.log(error);
}

Metoda readFileSync przyjmuje dwa parametry. Pierwszy parametr to ścieżka do pliku który chcemy wczytać. Drugi argument jest opcjonalny możemy w nim określić sposób kodowania(domyślnie przymuje wartość null) wczytywanego pliku oraz flagę operacji(domyślnie ma wartość r). Ten drugi parametr dodatkowo można przekazać jako string lub zwykły obiekt, więcej informacji znajdziesz pod tym linkiem.

Żeby obsłużyć ewentualny błąd przy wczytywaniu pliku korzystamy w wersji synchronicznej metody z obsługi wyjątku.

Asynchroniczne wczytywanie pliku

Żeby wczytać plik, w sposób asynchroniczny używamy metody: readFile

const fs = require('fs');

fs.readFile('./file-to-load', 'utf8' , (error, data) => {
  if (error) {
    console.log(error);
    return;
  }
  console.log(data);
});

Dwa pierwsze parametry są takie same jak dla wersji synchronicznej. W wersji asynchronicznej mamy trzeci parametr. Jest to zwykła funkcja zwrotna. Zwraca ona dwa parametry. Pierwszy parametr to ewentualny błąd przy próbie wczytywania, a drugi to dane z pliku.

Ścieżka do pliku

Przy pracy w z plikami warto wiedzieć jeszcze o istnieniu zmiennej o nazwie:

__dirname

Zwraca ona ścieżkę absolutną do katalogu który zawiera wywołany skrypt. Spójrzmy:

|--server
|  |--index.js
|  |--models
|     |--some-model.js

Gdy wywołamy w pliku some-model.js z tą linijkę kodu:

console.log(__dirname);

Otrzymamy:

/home/user/server/models

No dobra, ale po co nam ta informacja? Dwa powyższe przykłady bazują na ścieżce względnej i nawet nie powinniśmy wczytywać w ten sposób plików! Problem jest taki, że my nie mamy wpływu z jakiej lokalizacji skrypt zostanie wywołany. Dla jasności spójrz jeszcze na poniższy przypadek:

Weźmy pierwszy przykład:

fs.readFileSync('./file-to-load', 'utf8');

I załóżmy że wywołujemy skrypt, w miejscu w którym się on znajduje na przykład będzie to ścieżka /home/user/myscript:

node load-file.js

Plik zostanie wczytany poprawnie.

Teraz drugi przypadek. Wywołujemy ten sam skrypt, ale na przykład ze ścieżki: /home/user czyli jeden katalog wyżej:

node myscript/load-file.js

Oto wynik:

Error: ENOENT: no such file or directory, open '/home/user/file-to-load'

Używając tej zmiennej będziemy mieli pewność, że plik zostanie wczytany poprawnie:

const fs = require('fs');

try {
  const data = fs.readFileSync(__dirname + '/file-to-load', 'utf8');
  console.log(data);
} catch (error) {
  console.log(error);
}

Webstorm: Jak włączyć tryb pełnoekranowy?

Opublikowano: - tagi:

Praca, w trybie pełnoekranowym ma jeden duży plus: zwiększa nasze szanse na pracę w skupieniu. Przez to, że cały ekran jest zasłonięty możemy skoncentrować się na naszym zadaniu. Nie widzimy żadnych ikonek informujących, że czeka na nas wiadomość z komunikatora lub nieprzeczytany e-mail.

W Webstormie żeby przejść w tryb pełnego ekranu należy wybrać:

View -> Appearance -> Enter Full Screen

Domyślnie nie ma skrótu klawiszowego dla tej akcji. Dlatego warto go sobie ustawić. Jak ustawić skrót klawiszowy w Webstormie dowiesz się z tego wpisu.


Nowy dział: Książki

Opublikowano: - tagi:

Blog wzbogacił się dzisiaj o nowy dział: Książki

Znajdziesz tam listę książek które czytałem lub przesłuchałem. Listę będę aktualizował na bieżąco.


Webstorm: Jak ustawić własny skrót klawiszowy?

Opublikowano: - tagi:

Edytory firmy JetBrains znane są z tego, że można zrobić praktycznie wszystko za pomocą klawiatury używając skrótów klawiszowych. Taki styl pracy bardzo często jest szybszy niż mozolne przeklikiwanie opcji myszką. Już od jakiegoś czasu sam preferuję podejście keyboard first i Ciebie także gorąco zachęcam do takiego podejścia.

Z tego wpisu dowiesz się jak ustawić skrót klawiszowy w Webstorm.

Jak ustawić skrót klawiszowy?

W mojej pracy mamy ustawione różne reguły do statycznej analizy kodu za pomocą TSLint. Na przykład jeśli napiszę kod, który nie będzie pasował do jednej z reguł edytor podkreśli mi to na czerwono informując mnie że reguła została złamana i sugeruje mi poprawienie tej linijki. Poprawkę mogę zrobić na kilka sposobów: mogę najechać kursorem na dany fragment i poprosić Webstorma żeby mi to naprawił albo mam zdefiniowany skrpyt w package.json który ogarnie wszystko. I to jest ok, ale wyobraź sobie, że piszesz kod i w krótkim czasie pojawia się cała masa powiadomień. Takie żmudne przeklikiwanie nie ma sensu, odpalenie skryptu jest, w porządku, ale mimo wszystko chwilę to trwa.

Okazuje się że Webstorm posiada już wbudowaną funkcję poprawy kodu, który łamie zasady określone w TSLint(oczywiście tam gdzie edytor sam nie ogarnie błędów musisz osobiście je poprawić). Na tym przykładzie pokażę Ci jak ustawić własny skrót klawiszowy.

Użyj skrótu: CTRL + ALT + S lub idź do: File -> Settings -> Keymap:

Webstorm: Okno do ustawienia skrótów klawiszowych

Wyświetli się okno, gdzie możemy określać nasze skróty. Opcji do ustawienia jest cała masa dlatego, w celu wygodniejszej nawigacji zostały one pogrupowane. Ale co zrobić gdy nie wiemy gdzie nasza akcja dla której chcemy ustawić skrót się znajduje? To proste wystarczy skorzystać z wyszukiwarki:

Webstorm: Ustawienie skrótu klawiszowego do naprawy reguł TSLint

Aby dodać skrót należy: wybrać akcję, kliknąć w nią dwukrotnie myszką lub potwierdzić za pomocą klawisza: Enter. Z menu wybieramy opcję: "Add Keyboard Shortcut" i na klawiaturze wciskamy klawisze które mają tworzyć skrót. Klikamy Ok i mamy ustawiony skrót.

Konflikty skrótów klawiszowych

Konflikty w Webstormie

Z tego powodu, że w Webstormie jest ustawionych domyślnie bardzo dużo skrótów klawiszowych możliwe, że wybrany przez Ciebie skrót jest już zajęty. W tym przypadku zostaniesz o tym poinformowany w tym samym oknie gdzie ten skrót chcesz ustawić. Możesz oczywiście nadpisać poprzedni skrót.

Konflikty na poziomie systemu operacyjnego

Do konfliktu może dojść także na linii Webstorm Twój system operacyjny. Nie zdziw się jeśli w Webstormie jest ustawiony skrót klawiszowy ale... nie działa


Jak dodać klucz publiczny SSH na serwer?

Opublikowano: - tagi:

Logowanie się poprzez klucz publiczny/prywatny pozwala na szybki dostęp do serwera. Nie musimy pamiętać hasła wystarczy, że mamy dwa klucze: publiczny i prywatny. Oba klucze powinny znajdować się na komputerze z którego chcemy się logować na serwer. Dodatkowo na serwerze musi się znajdować klucz publiczny. Z tego wpisu dowiesz się jak dodać klucz publiczny na serwer.

Zanim zaczniemy zakładam że:

a) Masz już wygenerowane oba klucze: publiczny i prywatny

b) Masz dostęp do serwera na którym chcesz umieścić ten klucz

c) Twój serwer pozwala na logowanie się przez SSH

Opisywany sposób pokazuję na Linuxie(Ubuntu).

Serwis SSH

Zanim zaczniemy upewnijmy się czy mamy zainstalowane w systemie OpenSSH:

sudo systemctl status ssh.service

Jeśli masz zainstalowany ten serwis i status jest ustawiony jako aktywny(ang.: active) możesz przejść dalej. Jeśli jednak nie, wywołaj te komendy:

sudo apt-get update
sudo apt-get install openssh-server

Dodanie klucza publicznego za pomocą komendy

Ta metoda jest bardzo prosta i szybka. Wystarczy jedna komenda.

ssh-copy-id -i ~/.ssh/public_key_file.pub user@server

Komenda ssh-copy-id sprawi, że nasz klucz publiczny znajdzie się na serwerze. Najpierw poprzez flagę -i określamy ścieżkę do klucza publicznego, który chcemy umieścić na serwerze. Zwykle znajduje się ten plik w katalogu głównym ~/.ssh/. Plik publiczny domyślnie ma rozszerzenie .pub. W kolejnym kroku podajemy użytkownika dla którego chcemy ustawić klucz publiczny i oczywiście serwer na który chcemy się logować.

Kiedy wywołasz komendę zostaniesz poproszony o hasło. Po podaniu poprawnego hasła klucz publiczny powinien zostać dodany na serwerze. I od tej pory, gdy wywołasz:

ssh user@server

nie powinienś być pytany o hasło.