7. مثال [nuxt-04]: الحفاظ على جلسة عمل العميل/الخادم
يعالج مشروع [nuxt-04] مسألة الحفاظ على جلسة عمل العميل/الخادم. سنستخدم مشروع [nuxt-03] مع التعديلات التالية:
- ستحتوي صفحة [index] على زر يزيد عداد مخزن [Vuex]؛
- تظل الصفحة [page1] دون تغيير؛
- نريد أن يعرض الخادم الصفحة المطلوبة مع مخزن [Vuex] الذي تكون قيمة عداده هي آخر قيمة كانت موجودة على جانب العميل عند طلب الصفحة يدويًا من الخادم؛
يتم إنشاء مشروع [nuxt-04] مبدئيًا عن طريق استنساخ مشروع [nuxt-03]:

تتغير صفحة [index] فقط:
<!-- 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>
- السطر 10: أضفنا زرًا لزيادة عداد مخزن [Vuex]؛
- السطر 54: الطريقة التي تتعامل مع [النقر] على زر [Increment]؛
- السطر 57: يتم زيادة عداد المخزن بمقدار 1؛
- السطر 59: يتم تعيين قيمة العداد إلى الخاصية [value] بحيث يتم عرضها في السطر 8؛
قم بتشغيل مشروع [nuxt-04] باستخدام ملف [nuxt.config.js] التالي:
// 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'
}
عند التنفيذ، تظهر الصفحة الأولى كما يلي:

بالنقر على الزر [3] عدة مرات، تظهر الصفحة الجديدة التالية:

إذا استخدمت الرابط [3]، فستظهر لك الصفحة التالية:

- في [2]، تعرض الصفحة [page1] [1] قيمة العداد بشكل صحيح؛
الآن، دعونا نجدد الصفحة باستخدام [3]. الصفحة الجديدة هي كما يلي:

- في [2]، فقدنا قيمة العداد الحالية. لقد عدنا إلى قيمته الأولية؛
هذه النتيجة منطقية تمامًا إذا نظرت إلى السجلات:
- في [1]، أعاد الخادم تنفيذ الدالة [nuxtServerInit]. ومع ذلك، فإن هذه الدالة هي كما يلي:
السطر 28 يضبط العداد على 53.
دعونا نفحص طلب HTTP الذي أرسله المتصفح عندما قمنا بتحديث صفحة [page1]:

يمكننا أن نرى أنه بالإضافة إلى صفحة [page1] [1]، يطلب العميل عددًا من البرامج النصية من الخادم. لاحظ البرامج النصية [pages_index، pages_page1]، وهي البرامج النصية المرتبطة بصفحات [index، page]. يتم توفير هذه البرامج النصية مع كل طلب موجه إلى الخادم، بغض النظر عن الصفحة المطلوبة؛
في [1]، يتم طلب الصفحة [page1] من الخادم باستخدام طلب HTTP التالي:
يمكننا أن نرى أن هذا الطلب لا يرسل أي معلومات إلى الخادم. وبالتالي، لا يملك الخادم أي وسيلة لمعرفة حالة مخزن [Vuex] على جانب العميل. لكي يحدث ذلك، كان على العميل إرسال هذه المعلومات إلى الخادم.
في المشروع التالي [nuxt-05]، نستخدم ملف تعريف ارتباط حتى يتمكن العميل من إرسال المعلومات إلى الخادم عند الطلب.