7. Beispiel [nuxt-04]: Aufrechterhaltung einer Client/Server-Sitzung
Das Projekt [nuxt-04] befasst sich mit der Aufrechterhaltung einer Client-Server-Sitzung. Wir verwenden das Projekt [nuxt-03] mit den folgenden Änderungen:
- Die [index]-Seite erhält eine Schaltfläche, die den Zähler im [Vuex]-Store erhöht;
- Die Seite [page1] bleibt unverändert;
- Wir möchten, dass der Server die angeforderte Seite mit einem [Vuex]-Store zurückgibt, dessen Zählerwert dem letzten Wert entspricht, den er auf der Client-Seite hatte, als die Seite manuell vom Server angefordert wurde;
Das Projekt [nuxt-04] wird zunächst durch Klonen des Projekts [nuxt-03] erstellt:

Nur die [index]-Seite ändert sich:
<!-- page [index] -->
<template>
<Layout :left="true" :right="true">
<!-- navigation -->
<Navigation slot="left" />
<!-- message-->
<template slot="right">
<b-alert show variant="warning"> Home - value= {{ value }} </b-alert>
<!-- bouton -->
<b-button @click="incrementCounter" class="ml-3" variant="primary">Incrémenter</b-button>
</template>
</Layout>
</template>
<script>
/* eslint-disable no-undef */
/* eslint-disable no-console */
/* eslint-disable nuxt/no-env-in-hooks */
import Layout from '@/components/layout'
import Navigation from '@/components/navigation'
export default {
name: 'Home',
// components used
components: {
Layout,
Navigation
},
data() {
return {
value: 0
}
},
// life cycle
beforeCreate() {
// client and server
console.log('[home beforeCreate]')
},
created() {
// client and server
this.value = this.$store.state.counter
console.log('[home created], value=', this.value)
},
beforeMount() {
// customer only
console.log('[home beforeMount]')
},
mounted() {
// customer only
console.log('[home mounted]')
},
// event management
methods: {
incrementCounter() {
console.log('incrementCounter')
// counter increment of 1
this.$store.commit('increment', 1)
// change display value
this.value = this.$store.state.counter
}
}
}
</script>
- Zeile 10: Wir haben eine Schaltfläche hinzugefügt, um den Zähler im [Vuex]-Store zu erhöhen;
- Zeile 54: Die Methode, die den [Klick] auf die Schaltfläche [Increment] verarbeitet;
- Zeile 57: Der Store-Zähler wird um 1 erhöht;
- Zeile 59: Der Wert des Zählers wird der Eigenschaft [value] zugewiesen, damit er in Zeile 8 angezeigt wird;
Führen Sie das Projekt [nuxt-04] mit der folgenden Datei [nuxt.config.js] aus:
// source code directory
srcDir: 'nuxt-04',
// router
router: {
// application URL root
base: '/nuxt-04/'
},
// server
server: {
// service port, default 3000
port: 81,
// network addresses listened to, default localhost: 127.0.0.1
// 0.0.0.0 = all the machine's network addresses
host: 'localhost'
}
Bei der Ausführung wird zunächst folgende Seite angezeigt:

Wenn man mehrmals auf die Schaltfläche [3] klickt, erscheint die folgende neue Seite:

Wenn Sie den Link [3] verwenden, gelangen Sie auf die folgende Seite:

- In [2] zeigt die Seite [page1] [1] den Zählerstand korrekt an;
Aktualisieren wir nun die Seite mit [3]. Die neue Seite sieht wie folgt aus:

- In [2] ist der aktuelle Zählerstand verloren gegangen. Wir sind zum Ausgangswert zurückgekehrt;
Dieses Ergebnis ergibt vollkommen Sinn, wenn man sich die Protokolle ansieht:
- In [1] hat der Server die Funktion [nuxtServerInit] erneut ausgeführt. Diese Funktion sieht jedoch wie folgt aus:
Zeile 28 setzt den Zähler auf 53.
Sehen wir uns die HTTP-Anfrage an, die der Browser beim Aktualisieren der Seite [page1] gesendet hat:

Wir sehen, dass der Client zusätzlich zur Seite [page1] [1] eine Reihe von Skripten vom Server anfordert. Beachten Sie die Skripte [pages_index, pages_page1], bei denen es sich um die Skripte handelt, die mit den Seiten [index, page] verknüpft sind. Diese Skripte werden bei jeder Anfrage an den Server bereitgestellt, unabhängig von der angeforderten Seite;
In [1] wird die Seite [page1] mit folgender HTTP-Anfrage vom Server angefordert:
Wir sehen, dass diese Anfrage keine Informationen an den Server sendet. Der Server hat daher keine Möglichkeit, den Status des [Vuex]-Stores auf der Client-Seite zu ermitteln. Dazu hätte der Client diese Informationen an den Server senden müssen.
Im folgenden Projekt [nuxt-05] verwenden wir ein Cookie, damit der Client bei Bedarf Informationen an den Server senden kann.