Prosty i Nowoczesny Framework dla Vue.js
7 godz. 2 min · Vue.js · Full-stack i Programowanie
Wojciech PołowniakSr. Fullstack EngineerW tym projekcie tworzyć będziemy praktyczny projekt - klona Wikipedii! Minipedia pobierze dane z prawdziwego źrodła danych, zewnętrznego API WikiMedia - będzie łudząco podobna do oryginału oraz współdzieliła najważniejsze funkcjonalności, takie jak dostarczanie treści w różnych wersjach językowych, możliwość wyszukiwania artykułów, czy pobieranie najpopularniejszych wpisów dla danego języka. Stworzymy także podstronę wyświetlającą za każdym razem losowy artykuł w danej wersji językowej.Zobaczysz też, jak dokonać migracji ze statycznej strony HTML na Nuxt - oraz jak tworzyć przykładowe komponenty podczas tego procesu.Dzięki temu wszystkiemu, dowiesz się jak wykorzystać nabytą wiedzę w praktyce.
Dzięki Nuxtowi dowiesz się jak optymalizować Twoje strony www z duchem idei progressive enhancement, dostarczając coraz to lepsze doświadczenia dla swoich użytkowników oraz tworząc aplikację napisaną w 100% w JavaScript, która będzie działała nawet wtedy, gdy użytkownik jawnie wyłączy go w przeglądarce! To wszystko za SSR (Server Side Rendering), dzięki któremu treści będą gotowe do konsumpcji już przy wstępnej, pierwszej odpowiedzi z serwera WWW.Oczywiście, ma to swoje implikacje na wydajność naszej aplikacji - sprawiając że Lighthouse czy optymalizacja pod SEO staje się coraz prostsza!
Czymże jest ekosystem danego frameworka bez wsparcia społeczności! Dlatego podczas tego kursu nauczysz się instalować i wykorzystywać różne pluginy i moduły, które zaoszczędzą Ci dużo czasu. Dowiesz się też, jak tworzyć własne moduły - które rozszerzą działanie Twojej aplikacji Nuxt w sposób czysty i zarządzalny.
Nuxt jest frameworkiem w którym pracujemy zarówno po stronie front-endu, jak i back-endu. W związku z czym, stworzymy swoje własne API (bazujące na express.js) które będzie pewnego rodzaju pośrednikiem pomiędzy API WikiMedia oraz Twoją aplikacją internetową.
W tym kursie, dowiesz się także jak tworzyć swoje własne Middleware'y - czyli fragmenty kodu wywoływane pomiędzy przechodzeniem między stronami, czy podczas innych zapytań HTTP.Dodatkowo, zobaczysz jakie narzędzia daje nam Nuxt aby tworzyć progresywne aplikacje internetowe, oferując wsparcie dla takich funkcjonalności jak np. animacje między przejściami pojedynczymi podstronami naszego serwisu.
Tajemnicze i18n - czyli numeronim odpowiadający angielskiemu słowu "internalisation" - odnosi się w kontekście web developmentu do tłumaczenia danych na różne języki. Podczas realizacji projektu Minipedii, nie tylko wykorzystamy standardowe podejście do tłumaczeń stałych elementów naszego interfejsu użytkownika, ale także przetłumaczymy same dane zwracane z API, wykorzystując inną wersję językową w zależności od preferencji użytkownika!
Poznasz też kilka ciekawych pluginów i rozwiązań dotyczących optymalizacji pod SEO - poza faktem, że podejście spełniające intencje użytkownika jest najlepszym, co możemy zrobić - pluginy generujące nam mapę stron automatycznie na podstawie zadeklarowanych przez nas podstron, czy generatory danych jsonld pomogą w pozycjonowaniu Twojej wydajnej aplikacji jeszcze wyżej w hierarchii wyszukiwarek.
Aby móc efektywnie korzystać z tego kursu, powinieneś posiadać średnio zaawansowaną wiedzę z kategorii Front End, z naciskiem na umiejętność posługiwania się JavaScriptem oraz solidne podstawy NodeJS. Konieczna jest znajomość Vue, jako że Nuxt jest frameworkiem korzystającym z niego u swoich podstaw. Jeśli czujesz się dość swobodnie w wyżej wymienionych aspektach web developmentu, ten kurs będzie idealny dla Ciebie.
W poprzedniej lekcji dowiedzieliśmy się
jak korzystać z Excela, czyli z domyślnego Stora dla DAX.
I tutaj wyświetlimy sobie taką informację, że mamy zmodyfikowany nasz stan i
możemy z niego normalnie korzystać w sposób aktywny.
I w dowolnym miejscu naszej aplikacji go modyfikować.
Ja na razie zostawię tutaj te fragmenty
kodu i przejdę do tematu tej lekcji, czyli do async data.
Tak jak wspominałem na początku tego
działu, JavaScript może być wykonywane po stronie serwera nawet w komponentach View.
I do tego właśnie służy passing data.
Async data jest taka
predefiniowane metoda, która rozszerza domyślne metody View i tutaj async data.
No to będziemy mogli wywoływać nasz kod właśnie w tym miejscu.
Ta metoda otrzymuje tutaj jako parametr obiekt z różnymi właściwościami.
I tej właściwości jest tam naprawdę sporo.
Jest tam cały dostęp do routingu.
To się nazywa context.
Jeżeli wejdziemy tutaj w dokumentację i wpiszemy context.
No to widzimy naprawdę dużo różnych możliwości.
Mamy dostęp do App Store, czyli właśnie dobiłem do naszego obecnego routera, do
parametrów zmiennych konfiguracyjnych, zmiennych środowiskowych itd.
Itd. Jest tego naprawdę całkiem sporo.
Możemy sobie jeszcze tak dla pewności cały config tutaj przypiszemy
console log config i zauważyć, że faktycznie wypisze się to nam tutaj
w serwerze w momencie kiedy wejdziemy na naszą stronę.
Ja tutaj odświeżę.
I po odświeżeniu mamy tutaj pełny dostęp do tego co znajduje się w tym configu.
I jak widzisz jest tutaj też Axis, a jest tutaj Access.
Dlatego ponieważ w naszym next config jest.
Zrobiliśmy sobie tutaj moduł i on właśnie rozszerza m.in. kontekst w async data i
ten kontekst jest też dostępne w innych metodach i funkcjach.
W związku z czym co możemy z tym zrobić?
Jako że mamy tutaj tak dużo możliwości
jest tor, jest Axis i możemy robić normalne zapytania HTTP.
Daje to nam naprawdę dużo możliwości, ale co dalej z tymi danymi?
Więc zróbmy na początku taki test.
Że pobierzemy sobie dane.
Ze stara czyli nasz egzamin state.
Piszemy sobie tutaj vario config kropka store.
Kropka state.
Kropka example.
Stats wypiszę tutaj.
Zobaczymy co się stanie, czy zadziała czy nie.
Ponownie będziemy musieli sobie odświeżyć
naszego auta i zobaczyć co się dzieje tutaj w konsoli.
Więc zapisaliśmy odświeżamy roota.
Wracamy z powrotem.
I na sam dole i na samym dole faktycznie widzimy większość.
No i skoro dobraliśmy się tutaj do tych naszych danych inwestora
i faktycznie jesteśmy w stanie stwierdzić, że to wykonuje fabrykanci,
ponieważ jest to tutaj w konsoli na to, co można zrobić z tym dalej.
Otóż kolejną cechą async data jest to, że jeżeli coś zwrócimy z tej funkcji np.
właśnie te informacje ze store np.
from ASP 2k i tutaj w samym Mario
zapiszemy, to ta wartość, ten obiekt zostanie przypisany
do naszego data do data naszego komponentu.
Czyli w tym momencie jesteśmy w stanie
odwołać się do tej wartości, do tego statusu poprzez data.
To znaczy jeżeli zrobimy po prostu from
async data to mamy bezpośredni dostęp do wartości tego data.
Tutaj nie musimy tego niczym poprzedzać.
Zapiszmy, zobaczmy co się stanie.
I faktycznie mamy naszą informację przekazaną, to znaczy, że nasze async data
zadziałało i pobraliśmy dane ze Store i przekazaliśmy je dalej do naszego data.
Jest to całkiem przydatne, jeżeli robimy coś dosyć specyficznego dla danego PG.
Możemy tak czy siak rozwiązać to inaczej
poza komponentem poprzez właśnie routing middleware.
Ale to co możemy zrobić jeszcze i to chyba
na tym tutaj skupimy się w tym momencie to zrobić.
Zapytanie do naszego API, które wcześniej przygotowaliśmy.
To znaczy jeśli zrobimy sobie connect, akcja równa się config.
Akcja jest oczywiście.
Moglibyśmy tutaj zrobić District String
albo po prostu pobrać właściwości, na których nam zależy.
No to mamy tutaj dostęp do SAP już w kontekście Nexta.
Tzn. Będziemy mieli domyślnie teraz, których
potrzebujemy w dobrym miejscu jeśli zrobimy sobie konsolowe akcje ASP.NET.
I tutaj przekażemy nasz pakiet.
Czyli to było Epi Wiki.
Powiedzmy.
Content i tutaj page ID, czyli w naszym przypadku to będzie Janusz.
20.
Korczak.
I zrobimy sobie tutaj łata.
Ale aby użyć łata musimy zmienić funkcję na funkcję asynchroniczne.
Więc to jest taka śmieszna nazwa async.
A Segritta, jako że to jest nazwa funkcji no tak, to
musi być i zapiszemy to to się przebudowuje.
Odświeżamy ponownie, choć Mateusz tego nie robi.
Request status, Status, kod 404.
I tutaj po prostu chyba brakowało.
Odpowiedniej ścieżki w bucie.
Zobaczmy Viki tutaj page.
Dobrze więc Viki content.
Także zapisujemy ponownie.
Jeszcze jeden refresh.
Prawdopodobnie powinniśmy zrobić tutaj czekać, ażeby cała strona nam się nie
wracała w momencie, kiedy zapytanie nie przeszło.
Coś jest jeszcze nie tak.
Zróbmy request ręcznie.
Localhost 8000 API wiki content page Janusz 20 Core Hack.
I faktycznie tam zadziałało.
W związku z czym
dochodzę do wniosku, jeżeli dobrze myślę i nie zrobiłem żadnej literówki,
że jednak akcja musi mieć tutaj jakiś inny kontekst.
I na to wygląda, że tak jest.
Międzyczasie zróbmy sobie tutaj.
Aha.
Przekażemy go tutaj.
Tutaj chwilową zmienną test.
Będzie domyślnie.
Tutaj przypiszemy do testu i console.log.
Test zapiszemy.
Odświeżamy, odświeżamy.
I możemy zaraz zobaczyć o co chodzi z tym statkiem.
Faktycznie jest dwa razy na oczy i dalej ten request nie działa.
Zobaczmy Next axis.
Co jest pokazane w dokumentacji.
Dosyć.
Akcja z GET.
IPN spytał.
Ciekawy jestem, czy to jest kwestia tego, że tutaj nie ma dolara przed gettem.
Napiszmy to i zobaczmy.
Byłoby to dosyć dziwne, ale możliwe, że tak jest.
Tam jest.
Jeszcze zobaczymy. Dalej na wiosce ostrze.
Dolar fiat.
Axis Plugin Dollar Methods to gesty data.
Czyli tutaj będziemy mieli bezpośredni dostęp do danych, które zostaną zwrócone,
więc tak czy siak zostaniemy przy targecie.
Ale mimo wszystko nie zadziałał nam tutaj AX.
Pique z jakiegoś powodu.
Czy trzeba to jakoś skonfigurować?
Wydaje mi się, że nie.
Więc wróćmy jeszcze raz może do tego usage.
Wydaje mi się, że korzystamy z tej samej paczki.
Możemy się jeszcze upewnić, ale jest tutaj widoczne to, że mamy dostęp do.
Tych informacji w async data.
Spróbujmy w sumie po prostu zrobić request
bezpośrednio do naszego serwera localhost 8000.
Tutaj po przejdziemy to przez HTTP.
Zapiszmy.
Być może domyślnie nie wykrywa. Naszego serwera.
Dalej jest null.
Upewnijmy się, że korzystamy z tej samej wersji paczki.
Czyli co będzie w pakiet?
Czasem prawdopodobnie.
Next Akcja to jest dokładnie to samo.
Extra jest akcja z.
W związku z czym ja tutaj postaram się dodać.
Więc zobaczmy co się tutaj dzieje.
Poprzez wejście skąd i gdzie jest.
I tutaj na pewno będzie konfiguracja dla iOS a.
I wydaje mi się, że możemy tutaj zdefiniować back URL bez.
No chyba tak to będzie tak.
A.
I tutaj możemy wstawić sobie.
Wykonywanie tego nie jest najlepszym
sposobem, ale chcę tylko sprawdzić czy to faktycznie chodzi o to localhost 8000.
Zapiszemy.
Tutaj to nam się przebudowuje.
Tutaj wyczyść.
Naszą konsolę.
Wejdźmy z powrotem do pliku, pozbądźmy się localhost 8000, stąd napiszemy.
Odświeżamy.
I dalej niestety jest null.
Zobaczmy jak jest.
To jest nasz kod.
Odświeżamy.
Tutaj powinniśmy oczywiście to echo wrzucić, a nie w kluczu.
No niestety czasem takie rzeczy umkną.
Tego typu błędy są najprostsze, a zarazem najbardziej trudne do spostrzeżenia.
I faktycznie teraz to działa. Zastanawiam się co było problemem.
Prawdopodobnie to, że nie wchodziliśmy w ogóle w tego Ch.
Piotra i się nie wywracał, w związku z czym to nam działało.
I wracając do głównego clue.
To co możemy teraz z tym zrobić, to
faktycznie wydać te dane na frontend, czyli się tego pozbędziemy.
From data aktualizujemy bezpośrednimi request.
Oczywiście powinniśmy tutaj zrobić jakiś error handling.
No i teraz jak wejdziemy na naszą stronę to faktycznie widzimy te wszystkie dane
widoczne na stronie z propagowane do data i tak naprawdę moglibyśmy już kontynuować
propagowanie tych danych do naszych komponentów.
Ale zanim to zrobimy, ja chciałbym pokazać jeszcze jeden sposób jak można przekazać
dane z backendu na frontend w trakcie i wykorzystamy do tego routing middleware.
Zmiany wprowadzone w lekcji · 11 min
diff --git a/17/minipedia/nuxt.config.js b/17/minipedia/nuxt.config.js
index 135474a..40c2638 100644
--- a/17/minipedia/nuxt.config.js
+++ b/17/minipedia/nuxt.config.js
@@ -57,7 +57,9 @@ export default {
enabled: process.env.BASIC_ENABLED === 'true' // require boolean value(nullable)
},
// Axios module configuration: https://go.nuxtjs.dev/config-axios
- axios: {},
+ axios: {
+ baseURL: 'http://localhost:8000',
+ },
// Build Configuration: https://go.nuxtjs.dev/config-build
build: {
diff --git a/17/minipedia/pages/index.vue b/17/minipedia/pages/index.vue
index a56aedc..ec99025 100644
--- a/17/minipedia/pages/index.vue
+++ b/17/minipedia/pages/index.vue
@@ -1,6 +1,6 @@
<template>
<article class="content">
- {{ $store.state.exampleState }}
+ {{ fromAsyncData }}
<h1>
Janusz Korczak
</h1>
@@ -188,6 +188,14 @@
mounted() {
this.rename('modified state');
},
+ async asyncData(config) {
+ const value = config.store.state.exampleState;
+ const $axios = config.$axios;
+
+ return {
+ fromAsyncData: await $axios.$get('/api/wiki/content/page/Janusz%20Korczak'),
+ }
+ },
computed: {
fullInfo() {
return {