Ta lekcja jest w bazie eduweb
Zaloguj się kontem z dostępem albo wykup dostęp do bazy, żeby obejrzeć wideo.
Lekcja 36/ 42Tworzenie strony głównej
Programiści specjalizujący się w JavaScript już dawno przestali być postrzegani jako tylko i wyłącznie Front-End developerzy. JavaScript po stronie serwera jest już z nami ponad 10 lat za sprawą pierwszych wersji NodeJS.
W świecie gdzie frameworki takie jak React, Angular, Svelte czy VueJS są podstawą tworzenia współczesnych aplikacji internetowych, rozwiązania pozwalające pojedynczemu developerowi stworzenie pełnoprawnej aplikacji zaczęły kiełkować.
Tym właśnie jest NuxtJS - intuicyjny framework dla VueJS, który pozwoli Ci tworzyć zaawansowane konfiguracje Twoich wydajnych aplikacji internetowych, bazując na wiedzy którą już posiadasz z VueJS.
W 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.
Zmiany wprowadzone w lekcji · 19 min
diff --git a/32/minipedia/api/routes/wiki.js b/32/minipedia/api/routes/wiki.js
index f9a1c12..d9476ce 100644
--- a/32/minipedia/api/routes/wiki.js
+++ b/32/minipedia/api/routes/wiki.js
@@ -45,4 +45,23 @@ router.get('/random/lang/:lang/count/:count', async (req, res) => {
}
})
+router.get('/mostViewed/lang/:lang', async (req, res) => {
+ const lang = req.params.lang || 'en';
+
+ const Wiki = WikiJs({
+ apiUrl: `https://${lang}.wikipedia.org/w/api.php`,
+ headers: { 'User-Agent': process.env.BOT_USER_AGENT}
+ });
+
+ try {
+ const randomArticles = await Wiki.mostViewed();
+
+ return res.status(200).json(randomArticles);
+
+ } catch (e) {
+ console.error(e);
+ return res.status(500).json(e);
+ }
+})
+
export default router;
\ No newline at end of file
diff --git a/32/minipedia/components/MostViewed.vue b/32/minipedia/components/MostViewed.vue
new file mode 100644
index 0000000..c7c95a9
--- /dev/null
+++ b/32/minipedia/components/MostViewed.vue
@@ -0,0 +1,45 @@
+<template>
+ <div class="most-viewed">
+ <h2> {{ $t('MostViewed') }}</h2>
+ <ol>
+ <li v-for="article in filteredArticles">
+ <nuxt-link :to="localePath('/wiki/'+article.title)">
+ {{ article.title }}
+ </nuxt-link>
+ </li>
+ </ol>
+ </div>
+</template>
+<script>
+export default {
+ props: {
+ mostViewed: {
+ type: Array,
+ required: true,
+ }
+ },
+ computed: {
+ filteredArticles() {
+ return this.$props.mostViewed.filter(article => {
+ return !article.title.includes(':');
+ });
+ }
+ },
+}
+</script>
+
+<style>
+ .most-viewed h2 {
+ font-size: 1.8rem;
+ }
+
+ .most-viewed ol li {
+ font-size: 1.2rem;
+ }
+
+ .most-viewed {
+ border: 1px solid black;
+ padding: 1rem;
+ margin: 1rem;
+ }
+</style>
\ No newline at end of file
diff --git a/32/minipedia/lang/en-US.js b/32/minipedia/lang/en-US.js
index 0490bf6..e52ea36 100644
--- a/32/minipedia/lang/en-US.js
+++ b/32/minipedia/lang/en-US.js
@@ -29,5 +29,6 @@ export default {
'Languages': 'Languages',
'Register': 'Register',
'Login': 'Login',
- 'Disclaimer': 'From Wikipedia, the free encyclopedia'
+ 'Disclaimer': 'From Wikipedia, the free encyclopedia',
+ 'MostViewed': 'Most viewed',
}
\ No newline at end of file
diff --git a/32/minipedia/lang/es-ES.js b/32/minipedia/lang/es-ES.js
index 788f80f..300120d 100644
--- a/32/minipedia/lang/es-ES.js
+++ b/32/minipedia/lang/es-ES.js
@@ -29,5 +29,6 @@ export default {
'Languages': 'Idiomas',
'Register': 'Registrarse',
'Login': 'Acceso',
- 'Disclaimer': 'De Wikipedia, la enciclopedia libre'
+ 'Disclaimer': 'De Wikipedia, la enciclopedia libre',
+ 'MostViewed': 'Mas visto',
}
\ No newline at end of file
diff --git a/32/minipedia/lang/fr-FR.js b/32/minipedia/lang/fr-FR.js
index c7a2eda..4873d5b 100644
--- a/32/minipedia/lang/fr-FR.js
+++ b/32/minipedia/lang/fr-FR.js
@@ -29,5 +29,6 @@ export default {
'Languages': 'Langues',
'Register': 'S\'inscrire',
'Login': 'Connexion',
- 'Disclaimer': 'Un article de Wikipédia, l\'encyclopédie libre'
+ 'Disclaimer': 'Un article de Wikipédia, l\'encyclopédie libre',
+ 'MostViewed': 'Le plus regardé',
}
\ No newline at end of file
diff --git a/32/minipedia/middleware/random.js b/32/minipedia/middleware/random.js
index 79526e7..d72db0f 100644
--- a/32/minipedia/middleware/random.js
+++ b/32/minipedia/middleware/random.js
@@ -1,5 +1,11 @@
export default async function ({ store, route, $axios, app: { i18n }, redirect}) {
const lang = i18n.locale;
const random = (await $axios.$get(`/api/wiki/random/lang/${lang}/count/1`))[0];
+
+
+ if (lang === 'en') {
+ return redirect(`/wiki/${random}`);
+ }
+
return redirect(`/${lang}/wiki/${random}`);
}
\ No newline at end of file
diff --git a/32/minipedia/nuxt.config.js b/32/minipedia/nuxt.config.js
index 2f0d7e4..9b868dc 100644
--- a/32/minipedia/nuxt.config.js
+++ b/32/minipedia/nuxt.config.js
@@ -68,8 +68,13 @@ module.exports = {
}
],
lazy: true,
- langDir: 'lang/'
+ langDir: 'lang/',
+ defaultLocale: 'en',
},
+ loading: {
+ color: 'blue',
+ height: '5px'
+},
basic: {
name: process.env.USERNAME,
pass: process.env.PASSWORD,
diff --git a/32/minipedia/pages/index.vue b/32/minipedia/pages/index.vue
index 16aebeb..b073829 100644
--- a/32/minipedia/pages/index.vue
+++ b/32/minipedia/pages/index.vue
@@ -1,17 +1,19 @@
<template>
<article class="content">
<h1>Minipedia - {{ $t('Welcome') }} </h1>
-
- <nuxt-link :to="switchLocalePath('en')">English</nuxt-link>
- <nuxt-link :to="switchLocalePath('fr')">Français</nuxt-link>
- <nuxt-link :to="switchLocalePath('es')">Español</nuxt-link>
+ <MostViewed :mostViewed="mostViewed"></MostViewed>
</article>
</div>
</template>
<script>
export default {
- layout: 'default'
+ layout: 'default',
+ async asyncData({ $axios , app: { i18n }}) {
+ return {
+ mostViewed: await $axios.$get(`/api/wiki/mostViewed/lang/${i18n.locale}`),
+ };
+ }
}
</script>13 rozdziałów42 lekcje7h 2min
Dostęp do wszystkich kursów z bazy eduweb za 199 zł/mies.
Cześć! Nazywam się Wojtek i moja obecna rola to Full Stack Engineer - tworzeniem stron zajmuję się już od ponad dziesięciu lat. Jeśli miałbym wskazać moją pasję, to zdecydowanie byłoby to programowanie w technologiach webowych i dalsze szerzenie się wiedzą :)
Możesz kojarzyć mnie z kanału Koduje na Youtube, gdzie stworzyłem ponad 50 darmowych poradników dotyczących różnych zagadnień z Front-Endu, czy jako głównego koordynatora cyklicznych spotkań Meet.js Warszawa. Poza tym jestem też członkiem programu Mozilla TechSpeakers - technologie open-source, ich tworzenie oraz przemowy publiczne również nie są mi obce. Od czasu do czasu prowadzę również indywidualne zajęcia dla osób poszukujących swojej pierwszej pracy jako Front-End developer.
Uwielbiam tematykę dostępności sieci - o której świadomość, zwłaszcza na polskim rynku - jest dosyć znikoma. Interesuję się również IoT oraz VR (❤️) czy Game-Developmentem, również w JavaScript!
Uważam, że nauczanie jest zdecydowanie najlepszą metodą, by poszerzać swoje horyzonty i dalej się rozwijać!
https://koduje.pl