Partage de technologie

Pratiquez le développement Web front-end et back-end pendant les vacances d'été - notes

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

(Principalement du développement front-end, pas back-end. Permettez-moi d'abord de vous présenter un projet qui implémente le front-end et le back-end)

1. Installez et exécutez le projet MoreMall

1.Introduction au projet MoreMall

Le front-end et le back-end peuvent interagir les uns avec les autres, front-end : client, back-end : serveur ; la base de données peut être écrite en mall.sql.

2.Configuration de l'environnement


1) Installez Node.js : Node.js est unEnvironnement d'exécution JavaScript , pour créer des applications côté serveur. Téléchargez et installez la version appropriée de Node.js sur le site officiel [Node.js](https://nodejs.org/). La configuration de l'environnement de node.js est relativement complexe.

2) Installez MySQL
3) Installer les dépendances : exécutez `npm install` dans le répertoire racine du projet, ce quiLe fichier `package.json` installe toutes les dépendances requises pour le projet.

(MySQL) : https://blog.csdn.net/chuci0910/article/details/138770174
(NodeJs) : https://zhuanlan.zhihu.com/p/686043568

2. Créez un projet Vue

1. Créez un projet à l'aide de Vue CLI

1) Installez et créez le projet vue : créez un nouveau dossier pour mettre le fichier projet - cmd dans le répertoire des fichiers - `vue create my-project`
2) Structure du répertoire du projet : le répertoire `src` contient des sous-répertoires tels que `components` et `views`, qui sont utilisés pour stocker les composants et les pages.

3) dans<template>Écrire des données dans un script
- **Définir les données** : dans le composant Vue` <script>`部分定义数据,通过`data`函数返回数据对象。
- **Afficher les données** : dans le composant Vue`<template> `Utilisation partielle des expressions d'interpolation`{{ }}` ou la commande `v-bind` etc. pour afficher les données.

Exemple : composant—foo.vue

  1. <template>
  2. <div>{{msg}}</div>
  3. </template>
  4. <script>
  5. export default{
  6. name:'foo',
  7. data(){
  8. return{
  9. msg:'foo page'
  10. }
  11. }
  12. }
  13. </script>
  14. <style>
  15. </style>

3. Installez et utilisez vue-router

Voici le test de route du projet

1. Installez vue-router


1) Installation : cmd sous le répertoire du fichier de projet où vous souhaitez ajouter cette chose - `npm install vue-router`
2) Configurer le routage : configurez les règles de routage dans `src/router/index.js` pour mapper différents chemins vers différents composants.

Exemple:

Code dans le fichier src/router/index.js :

  1. import { createRouter, createWebHistory } from 'vue-router';
  2. import Home from '../components/Home.vue'; // 示例组件路径,请根据实际情况调整
  3. import Bar from '../components/Bar.vue'; // 示例组件路径,请根据实际情况调整
  4. import Foo from '../components/Foo.vue'; // 示例组件路径,请根据实际情况调整
  5. const routes = [
  6. {
  7. path: '/',
  8. name: 'Home',
  9. component: Home
  10. },
  11. {
  12. path: '/bar',
  13. name: 'Bar',
  14. component: Bar
  15. },
  16. {
  17. path: '/foo',
  18. name: 'Foo',
  19. component: Foo
  20. }
  21. // 其他路由配置
  22. ];
  23. const router = createRouter({
  24. history: createWebHistory(process.env.BASE_URL),
  25. routes
  26. });
  27. export default router;

3) Utiliser<router-link>et<router-view>
<router-link>: Utilisé pour créer des liens de navigation, qui peuvent être basculés vers la page de routage correspondante après avoir cliqué.
<router-view>: Utilisé pour afficher les composants de routage correspondants.

Exemple : App.vue :

  1. <template>
  2. <div id="app">
  3. <router-link to="/bar">Bar</router-link>|
  4. <router-link to="/foo">Foo</router-link>
  5. <router-view></router-view> <!-- 确保包含这个标签 -->
  6. </div>
  7. </template>

Affichage de la page : (faites attention au numéro de port)

Barre de clic : Alors pourquoi mon numéro de port s'appelle-t-il « /bar » ?

Parce que vous vous souvenez de l'endroit où le routeur est configuré, qui est le chemin. Le nom ici peut être choisi avec désinvolture, mais il est généralement cohérent avec le nom du composant et le nom du composant ne peut pas être modifié.

Pourquoi cliquer pour sauter - à cause de ça<router-link> ,et<router-view> La fonction spécifique sur la page sera discutée plus tard.

4. Créez la première applet élément-plus

1. Utilisez le routeur + élément-plus ci-dessus

element-plus peut être compris comme une série de packages packagés pour le rendu des pages frontales (le package universel peut être compris de cette façon, les programmeurs ne sont pas des programmeurs, nous ne sommes que des porteurs de packages)

2. Comment utiliser leur code de composant

Cliquez sur le site officielPrésentation Présentation des composants | Element Plus (element-plus.org)

 

3.Installer l'élément-plus


1) Installation : cmd—`npm install element-plus` dans le fichier de projet que vous souhaitez utiliser.
2) Introduisez element-plus : introduisez Element Plus et les fichiers de style dans `main.js`

  1. import ElementPlus from 'element-plus'//引入elementplus
  2. import 'element-plus/dist/index.css'//引入elementplus样式文件


3) Utiliser des composants : utilisez les composants de l'interface utilisateur Element Plus dans les composants Vue, tels que `<el-button> `,`<el-input> `Attendez.

Exemple : App.vue, de toute façon, avec<el->Le début est

  1. <template>
  2. <el-container class="layout-container-demo" style="height: 500px">
  3. <el-aside width="200px">
  4. <el-scrollbar>
  5. <el-menu :default-openeds="['1', '3']">
  6. <el-sub-menu index="1">
  7. <template #title>
  8. <el-icon><Message /></el-icon>Navigator One
  9. </template>
  10. <el-menu-item-group>
  11. <template #title>Group 1</template>
  12. <el-menu-item index="1-1">
  13. <router-link to="/optionOne">Option 1</router-link>
  14. </el-menu-item>
  15. <el-menu-item index="1-2">
  16. <router-link to="/optionTwo">Option 2</router-link>
  17. </el-menu-item>
  18. </el-menu-item-group>
  19. <el-menu-item-group title="Group 2">
  20. <el-menu-item index="1-3">
  21. <router-link to="/optionThree">Option 3</router-link>
  22. </el-menu-item>
  23. </el-menu-item-group>
  24. <el-sub-menu index="1-4">
  25. <template #title>Option4</template>
  26. <el-menu-item index="1-4-1">Option 4-1
  27. <router-link to="/optionFour">Option4</router-link>
  28. </el-menu-item>
  29. </el-sub-menu>
  30. </el-sub-menu>
  31. <el-sub-menu index="2">
  32. <template #title>
  33. <el-icon><icon-menu /></el-icon>Navigator Two
  34. </template>
  35. <el-menu-item-group>
  36. <template #title>Group 1</template>
  37. <el-menu-item index="2-1">Option 1</el-menu-item>
  38. <el-menu-item index="2-2">Option 2</el-menu-item>
  39. </el-menu-item-group>
  40. <el-menu-item-group title="Group 2">
  41. <el-menu-item index="2-3">Option 3</el-menu-item>
  42. </el-menu-item-group>
  43. <el-sub-menu index="2-4">
  44. <template #title>Option 4</template>
  45. <el-menu-item index="2-4-1">Option 4-1</el-menu-item>
  46. </el-sub-menu>
  47. </el-sub-menu>
  48. <el-sub-menu index="3">
  49. <template #title>
  50. <el-icon><setting /></el-icon>Navigator Three
  51. </template>
  52. <el-menu-item-group>
  53. <template #title>Group 1</template>
  54. <el-menu-item index="3-1">Option 1</el-menu-item>
  55. <el-menu-item index="3-2">Option 2</el-menu-item>
  56. </el-menu-item-group>
  57. <el-menu-item-group title="Group 2">
  58. <el-menu-item index="3-3">Option 3</el-menu-item>
  59. </el-menu-item-group>
  60. <el-sub-menu index="3-4">
  61. <template #title>Option 4</template>
  62. <el-menu-item index="3-4-1">Option 4-1</el-menu-item>
  63. </el-sub-menu>
  64. </el-sub-menu>
  65. </el-menu>
  66. </el-scrollbar>
  67. </el-aside>
  68. <el-container>
  69. <el-header style="text-align: right; font-size: 12px">
  70. <div class="toolbar">
  71. <el-dropdown>
  72. <el-icon style="margin-right: 8px; margin-top: 1px">
  73. <setting />
  74. </el-icon>
  75. <template #dropdown>
  76. <el-dropdown-menu>
  77. <el-dropdown-item>View</el-dropdown-item>
  78. <el-dropdown-item>Add</el-dropdown-item>
  79. <el-dropdown-item>Delete</el-dropdown-item>
  80. </el-dropdown-menu>
  81. </template>
  82. </el-dropdown>
  83. <span>Tom</span>
  84. </div>
  85. </el-header>
  86. <el-main>
  87. <el-scrollbar>
  88. <router-view></router-view>
  89. </el-scrollbar>
  90. </el-main>
  91. </el-container>
  92. </el-container>
  93. </template>

4) Expliquez ici<router-view> effet:

Vous voyez où est passé le « 3 » dans l’image ci-dessus après avoir ajusté sa position. Compris comme un espace réservé.

  1. <el-main>
  2. <el-scrollbar>
  3. </el-scrollbar>
  4. </el-main>
  5. </el-container>
  6. </el-container>
  7. <router-view></router-view>
  8. </template>

4. Le saut de page est également implémenté ici, comment


1) Configuration du routage : Configurez le routage dans `src/router/index.js`, chaque route correspond à un composant.

Exemple : Au fait, si le chemin est '/', cela signifie que la première page qui arrive est celle-ci.

Il ne semble pas indiquer comment exécuter le projet : cmd-npm run serve dans le répertoire du fichier du projet

  1. import{createRouter,createWebHistory} from 'vue-router';//导入外部组件,声明vue路由
  2. import HelloWorld from '../components/HelloWorld.vue';
  3. import OptionOne from '../components/OptionOne.vue';
  4. import OptionTwo from '../components/OptionTwo.vue';
  5. import OptionThree from '../components/OptionThree.vue';
  6. import OptionFour from '../components/OptionFour.vue';
  7. const routes=[//路由器配置
  8. {
  9. path:'/',//这样的话就最先进入的是helloworld页面了
  10. name:'HelloWorld',
  11. component:HelloWorld
  12. },
  13. {
  14. path:'/optionOne',
  15. name:'OptionOne',
  16. component:OptionOne
  17. },
  18. {
  19. path:'/optionTwo',
  20. name:'OptionTwo',
  21. component:OptionTwo
  22. },
  23. {
  24. path:'/optionThree',
  25. name:'OptionThree',
  26. component:OptionThree
  27. },
  28. {
  29. path:'/optionFour',
  30. name:'OptionFour',
  31. component:OptionFour
  32. }
  33. ];
  34. const router=createRouter({
  35. history: createWebHistory(process.env.Base_URL),
  36. routes
  37. });
  38. export default router;


2) Liens de navigation : utilisez `<router-link> `Créez un lien de navigation, cliquez dessus pour accéder à la page correspondante, utilisez`<router-view> `Afficher les composants de routage.

  1. <el-menu-item index="1-3">
  2. <router-link to="/optionThree">Option 3</router-link>
  3. </el-menu-item>

5. Utilisation combinée de Vue-router, element-plus et axios

1. Installez axios

1) Comme ci-dessus, commande d'installation : `npm install axios`
2) Configurez axios : configurez l'instance axios dans `main.js`, définissez la baseURL par défaut et d'autres configurations globales.

2. Mettre en œuvre des mini-programmes front-end et back-end


- **Interface de définition** : définissez l'interface API côté serveur, traitez la requête frontale et renvoyez les données.
- **Données de requête frontale** : utilisez axios dans le composant front-end pour envoyer une requête, obtenir des données et les afficher sur la page.
- **Commutation dynamique des données** : combinez les composants Element Plus et Vue Router pour réaliser une commutation dynamique des données des menus, par exemple l'affichage de différents contenus en fonction de différents éléments de menu.

Étapes spécifiques :
1) Créez une instance axios et configurez :

  1. import axios from 'axios';
  2. // 创建一个 axios 实例
  3. const http = axios.create({
  4. baseURL: 'http://localhost:3000/',
  5. // 其他配置...
  6. });
  7. // 创建一个 Vue 应用
  8. const app = createApp(App);
  9. // 将 axios 实例添加到 Vue 应用的原型上
  10. app.config.globalProperties.$http = http;
  11. // 挂载 Vue 应用
  12. app.mount('#app');

2) Utilisez axios dans le composant Vue pour envoyer la requête :
  

  1. <script>
  2. const tableData = [];
  3. export default {
  4. name: 'HelloWorld',
  5. created() {
  6. this.getUserList();
  7. },
  8. data() {
  9. return {
  10. // 假设我们从API获取的是一个用户列表
  11. tableData
  12. };
  13. },
  14. methods: {
  15. getUserList() {
  16. this.$http.get('/').then(response => {
  17. console.log(response.data)
  18. this.tableData = response.data;
  19. })
  20. .catch(error => {
  21. console.log(error)
  22. });
  23. }
  24. }
  25. }
  26. </script>

3) Combinez Element Plus et Vue Router pour implémenter un menu dynamique : comme expliqué précédemment.

3.Que fait axios ?

Axios est un client HTTP basé sur Promise pour les requêtes HTTP dans les navigateurs et les environnements Node.js. Il vous permet d'envoyer des requêtes asynchrones plus facilement et de traiter les données de réponse. Dans un projet Vue.js, vous pouvez utiliser Axios pour communiquer avec l'API backend, comme l'obtention de données, l'envoi de données de formulaire, le traitement des téléchargements de fichiers et d'autres opérations. axios fournit une API concise qui prend en charge les intercepteurs de requêtes et de réponses, l'annulation des requêtes, la configuration globale et d'autres fonctions, rendant l'interaction des données entre le front-end et le back-end plus efficace et contrôlable.

1) Ajoutez d’abord un src/server/index.js basé sur le projet précédent comme suit

  1. const express = require('express');
  2. const app = express();
  3. const port = 3000; // 你可以选择任何未被占用的端口
  4. // 设置中间件以允许跨域请求(可选,根据你的需求)
  5. app.use((req, res, next) => {
  6. res.header("Access-Control-Allow-Origin", "*");
  7. res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  8. next();
  9. });
  10. // 设置路由和响应
  11. app.get('/', (req, res) => {
  12. // 创建一个对象,其中包含你想要返回的数据
  13. const data = [
  14. { id: 1, name: 'Alice', age:18, email: '[email protected]' },
  15. { id: 2, name: 'Bob', age:19, email: '[email protected]' },
  16. // ...更多用户
  17. ];
  18. // 使用res.json()方法发送JSON响应
  19. res.json(data);
  20. });
  21. // 启动服务器
  22. app.listen(port, () => {
  23. console.log(`Server is running on http://localhost:${port}`);
  24. });

Description de ce code :

Cet extrait de code utilise Node.js et le framework Express pour créer un serveur simple. Voici une explication ligne par ligne du code :

1. **Importez le module Express et créez une instance d'application** :
```javascript
const express = require('express');
const app = express();
   ```

- `express` est un framework pour créer des applications Web. Ici, il est importé via `require('express')` et une instance d'application est créée via `express()`.

2. **Définissez le port d'écoute du serveur** :
```javascript
const port = 3000; // Vous pouvez choisir n'importe quel port inoccupé
   ```

- La variable `port` définit le numéro de port sur lequel le serveur écoute, ici il est fixé à `3000`.

3. **Paramètres du middleware autorisant les requêtes inter-domaines** :
```javascript
app.use((req, res, suivant) =&gt; {
res.header("Contrôle d'accès-Autoriser-Origine", "*");
res.header("Contrôle d'accès-Autoriser-En-têtes", "Origine, X-Demandé-Avec, Type-de-contenu, Accepter");
suivant();
   });  
   ```

- Ce code met en place un middleware pour autoriser les requêtes cross-origin (CORS). Il autorise les requêtes de n’importe quelle origine et autorise certains champs d’en-tête. La fonction `next()` garantit que la requête continue jusqu'au prochain middleware ou gestionnaire de route.

4. **Définir les itinéraires et les réponses** :
```javascript
app.get('/', (req, res) =&gt; {
//Créez un objet contenant les données que vous souhaitez renvoyer
données const = [
{ id: 1, nom: 'Alice', âge: 18, email: '[email protected]' },
{ id: 2, nom: 'Bob', âge: 19, email: '[email protected]' },
// ...plus d'utilisateurs
     ];  
     
// Utilisez la méthode res.json() pour envoyer la réponse JSON
res.json(données);
   });  
   ```

- `app.get('/', ...)` définit une route pour les requêtes GET Lorsque le client accède au chemin racine `/`, cette fonction de gestionnaire sera appelée.
- La fonction de gestionnaire crée un objet `data` contenant les données utilisateur et les renvoie au client sous forme de réponse JSON en utilisant `res.json(data)`.

5. **Démarrez le serveur** :
```javascript
app.listen(port, () =&gt; {
console.log(`Le serveur s'exécute sur http://localhost:${port}`);
   });  
   ```

- `app.listen(port, ...)` démarre le serveur et le laisse écouter sur le port défini.
- Lorsque le serveur démarre avec succès, un message est affiché sur la console indiquant que le serveur est en cours d'exécution et accessible via `http://localhost:3000`.

Résumé : Cet extrait de code crée un serveur Express simple qui répond aux requêtes GET adressées au chemin racine `/` et renvoie une réponse JSON contenant les données utilisateur. Un middleware est également mis en place pour permettre les requêtes cross-domaines. En exécutant ce serveur sur le port « 3000 », vous pouvez utiliser un navigateur ou un autre client HTTP pour accéder à « http://localhost:3000 » et afficher les données JSON renvoyées.

2) Courir

cmd : nœud index.js dans le répertoire de fichiers du serveur

Peut voir les données d'arrière-plan

Ensuite, exécutez cmd-npm run serve dans le répertoire du fichier du projet, et vous pourrez voir qu'il y a des données ! !

Comment gérer les données back-end ?

Juste dans le fichier server/index.js nouvellement ajouté :

  1. // 设置路由和响应
  2. app.get('/', (req, res) => {
  3. // 创建一个对象,其中包含你想要返回的数据
  4. const data = [
  5. { id: 1, name: 'Alice', age:18, email: '[email protected]' },
  6. { id: 2, name: 'Bob', age:19, email: '[email protected]' },
  7. // ...更多用户
  8. ];

Sur la base de six et cinq, plus le backend

Comment exécuter les cinq projets avec le backend du premier projet MoreMall consiste à combiner le front-end et le back-end.

1. Préparez deux choses

1)mysql.sql

  1. create database test;
  2. use test;
  3. CREATE TABLE user (
  4. id INT AUTO_INCREMENT PRIMARY KEY,
  5. name VARCHAR(255) NOT NULL,
  6. password VARCHAR(255) NOT NULL,
  7. age VARCHAR(255) NOT NULL,
  8. email VARCHAR(255) NOT NULL
  9. );
  10. INSERT INTO user (name, password,age,email) VALUES ('Bob', '123','23','[email protected]');
  11. INSERT INTO user (name, password,age,email) VALUES ('Tom', '123','23','[email protected]');

2) serveur

Mettez-le sous le fichier scr, mais il peut également être mis en parallèle. Je l'ai laissé partir avant et je ne l'ai pas supprimé. Quoi qu'il en soit, npm run serve est également possible dans différents répertoires de fichiers.

Deux fichiers sous le serveur :

(1)db.js

  1. let mysql = require('mysql')
  2. //配置链接数据库的参数
  3. let db = mysql.createPool({
  4. host: '127.0.0.1',
  5. user: 'root',
  6. port:'3306',
  7. password: 'root',
  8. database: 'test'
  9. })
  10. module.exports = db

illustrer:

Le but de ce code est d'utiliser Node.js et le module `mysql` pour créer un pool de connexions à une base de données MySQL et l'exporter pour une utilisation dans d'autres modules.

L'explication spécifique est la suivante :

1. **Importer le module `mysql`** :
```javascript
laissez mysql = require('mysql');
   ```
Cette ligne de code importe le module « mysql », qui est une bibliothèque Node.js utilisée pour se connecter et faire fonctionner les bases de données MySQL.

2. **Créez un pool de connexions** :
```javascript
laissez db = mysql.createPool({
hôte : '127.0.0.1',
utilisateur : 'root',
port: '3306',
mot de passe : 'root',
base de données : 'test'
   });
   ```
Ce code crée un pool de connexions en utilisant la méthode `mysql.createPool`. Un pool de connexions est un ensemble de connexions à une base de données qui peuvent être partagées et réutilisées par plusieurs clients. La création d'un pool de connexions peut améliorer les performances car elle évite de rétablir la connexion à la base de données à chaque requête.

- `host : '127.0.0.1'` : L'adresse hôte du serveur de base de données. Il s'agit du serveur local.
- `user : 'root'` : nom d'utilisateur de la base de données.
- `port : '3306'` : numéro de port de la base de données. Le port par défaut pour MySQL est 3306.
- `password : 'root'` : mot de passe de la base de données.
- `database : 'test'` : Le nom de la base de données à connecter.

3. **Exporter le pool de connexions** :
```javascript
module.exports = base de données;
   ```
Cette ligne de code exporte l'objet pool de connexions « db » afin que d'autres modules puissent importer et utiliser ce pool de connexions via la méthode « require ».

Grâce à ce pool de connexions, vous pouvez l'introduire dans d'autres modules et l'utiliser pour effectuer des requêtes de base de données. Par exemple:

```javascript
//Introduire le pool de connexions à la base de données
const db = require('./chemin/vers/ce/module');

//Exécuter la requête de base de données
db.query('SELECT * FROM utilisateur', (err, résultats) =&gt; {
si (errer) {
console.error('Erreur lors de l'exécution de la requête :', err);
retour;
    }
console.log('Résultats de la requête :', résultats);
});
```

Cette méthode facilite la gestion et l'utilisation des connexions aux bases de données, en particulier dans les applications nécessitant un accès fréquent aux bases de données.

(2)index.js

  1. const express = require('express');
  2. const app = express();
  3. const port = 3000; // 你可以选择任何未被占用的端口
  4. const db = require('./db')
  5. // 设置中间件以允许跨域请求(可选,根据你的需求)
  6. app.use((req, res, next) => {
  7. res.header("Access-Control-Allow-Origin", "*");
  8. res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  9. next();
  10. });
  11. //配置对外接口
  12. app.get('/', (req, res) => {
  13. var sql = 'select * from user'
  14. db.query(sql, (err, data) => {
  15. if(err) {
  16. return res.send({
  17. status: 400,
  18. message: "查询失败"
  19. })
  20. } else{
  21. console.log('查询结果:', data)
  22. res.json(data);
  23. }
  24. })
  25. });
  26. // 设置路由和响应
  27. /*
  28. app.get('/', (req, res) => {
  29. // 创建一个对象,其中包含你想要返回的数据
  30. const data = [
  31. { id: 1, name: 'Alice', age:18, email: '[email protected]' },
  32. { id: 2, name: 'Bob', age:19, email: '[email protected]' },
  33. // ...更多用户
  34. ];
  35. // 使用res.json()方法发送JSON响应
  36. res.json(data);
  37. });
  38. */
  39. // 启动服务器
  40. app.listen(port, () => {
  41. console.log(`Server is running on http://localhost:${port}`);
  42. });

2. Compléter les connaissances des novices

Si vous ne comprenez pas, lisez la suite :/

  • Terminal de service

    • Créez un serveur Express et configurez un pool de connexions à la base de données.
    • Configurez un middleware qui autorise les requêtes inter-domaines.
    • Définissez une route GET pour interroger la base de données et renvoyer les données.
  • client

    • Utilisez Axios pour envoyer des requêtes HTTP au serveur dans le composant Vue.
    • Obtenez les données et affichez-les sur la page.

"En utilisant ce pool de connexions, vous pouvez l'introduire dans d'autres modules et l'utiliser pour effectuer des requêtes de base de données." - Quels sont les autres modules ?

Il s'agit du code côté serveur sur le serveur.

Dans ce contexte, « autres modules » fait généralement référence à d'autres fichiers JavaScript de votre projet Node.js, et non au fichier « .vue » du composant Vue. Plus précisément, ces autres modules sont généralement du code côté serveur qui gère les requêtes HTTP et les interactions avec la base de données.

Une structure de projet typique pourrait ressembler à ceci :

```
projet/
├── serveur/
│ ├── db.js // Le code du pool de connexion à la base de données que vous avez fourni
│ ├── routes.js // Module qui définit le routage API
│ └── server.js // Le fichier qui démarre le serveur, ce à quoi je correspond ici est
└── client/
├── src/
│ ├── composants/
│ │ ├── YourComponent.vue // Votre composant Vue
│ ├── main.js // Fichier d'entrée du projet Vue
│ └── ... // Autres fichiers frontaux
└── paquet.json
```

Dans cette structure, le dossier `server/` contient le code côté serveur, tandis que le dossier `client/` contient le code Vue front-end.

### Exemple : Utilisation du pool de connexions à la base de données côté serveur

En supposant que vous disposez déjà d'un fichier `server/db.js` qui définit un pool de connexions à la base de données, vous pouvez alors l'introduire et l'utiliser dans le fichier `server/routes.js` :

```javascript
// serveur/routes.js
const express = require('express');
const db = require('./db'); //Introduire le pool de connexions à la base de données

const router = express.Router();//Je n'ai aucune utilité pour cette section de routers.js. Les autres parties sont rassemblées dans index.js, et ensemble nous réalisons "l'introduction d'un pool de connexions à la base de données - la définition des paramètres inter-domaines". selon les besoins" Accès ? -Définir le routage-(objectif final) démarrer le serveur"

//Définir un exemple d'itinéraire
routeur.get('/utilisateurs', (req, res) =&gt; {
db.query('SELECT * FROM utilisateur', (err, résultats) =&gt; {
si (errer) {
renvoyer res.status(500).json({ erreur : err.message });
        }
res.json(résultats);
    });
});

module.exports = routeur;
```

Ensuite, configurez et démarrez le serveur Express dans le fichier `server/server.js` et utilisez les routes définies :

```javascript
// serveur/serveur.js
const express = require('express');
const app = express();
const routes = require('./routes'); //Introduire les routes définies

app.use('/api', routes); // Utiliser le routage

port constant = 3000;
app.listen(port, () =&gt; {
console.log(`Le serveur s'exécute sur http://localhost:${port}`);
});
```

### Utilisation de l'API dans les composants Vue

Dans votre composant Vue, vous pouvez utiliser Axios pour envoyer des requêtes HTTP à l'API définie ci-dessus :

```vue
<template>
  <div>
<h2>Utilisateurs</h2>
    <ul>
      <li v-for="user in users" :key="user.id">
        {{ nom d'utilisateur }} - {{ utilisateur.email }}
      </li>
    </ul>
  </div>
</template>

<script>
importer axios depuis 'axios';

exportation par défaut {
données() {
retour {
utilisateurs: []
    };
  },
monté() {
axios.get('http://localhost:3000/api/users')
.then(réponse =&gt; {
ceci.utilisateurs = réponse.données;
      })
.catch(erreur =&gt; {
console.error('Erreur lors de la récupération des utilisateurs :', error);
      });
  }
};
</script>
```

De cette façon, en séparant la logique du front-end et du back-end, vous pouvez mieux organiser et gérer le code, tout en garantissant que le côté serveur gère l'interaction avec la base de données, tandis que le front-end effectue l'acquisition et l'affichage des données via l'API.

3.

1) Le serveur doit être à l'écoute ! ! Ce n'est que lors de la surveillance que vous pouvez exécuter le projet et voir les données d'arrière-plan. Juste les étapes suivantes :

Commande Project/src/sserver/——cmd——node index.js, commencez à visualiser

Une surveillance correcte montre :

Deuxièmement, j'ai découvert que je pouvais utiliserhttp://localhost:3000/api/utilisateursJe vois les données JSON correctes, mais je ne peux pas utiliser http://localhost:3000. La solution est la suivante :

Modifier optionOne.vue :

  1. export default {
  2. data() {
  3. return {
  4. users: []
  5. };
  6. },
  7. mounted() {
  8. // axios.get('http://localhost:3000/api/users')//服务端的信息
  9. axios.get('http://localhost:3000')//服务端的信息
  10. .then(response => {
  11. this.users = response.data;
  12. })
  13. .catch(error => {
  14. console.error('Error fetching users:', error);
  15. });
  16. }
  17. };

4. Comment ajouter une page de connexion

Tout d'abord, ajoutez au dossier Assets : img est l'image de la page qui a été connectée au début et le dossier CSS.

Ajoutez ensuite Login.vue, le routeur de Login

La dernière étape consiste à ajuster la page précédente, à séparer App.vue (total), à l'encapsuler, à dessiner un cadre sur le côté gauche de la page pour créer un Bar.vue séparé, et ensuite si vous souhaitez voir cette barre sur chaque page, vous devez l'ajouter à chaque page. Ajoutez une référence à Bar.vue dans le fichier .vue.

Exemple:

optionTwo.vue:

  1. <template>
  2. <el-main>
  3. <el-container>
  4. <Bar />
  5. {{msg}}
  6. <!-- 根据当前的路由显示内容 -->
  7. <router-view></router-view>
  8. </el-container>
  9. </el-main>
  10. </template>
  11. <script>
  12. import Bar from './Bar.vue';
  13. export default {
  14. name: 'optionTwo',
  15. components:{
  16. Bar
  17. },
  18. data () {
  19. return {
  20. msg: 'Option Two'
  21. }
  22. }
  23. }
  24. </script>

optionOne.vue:

  • Bien que<script>里面import了Bar,但是模块中也要用<Bar />
  • Commentez import axios car cette phrase a le même effet que this.$http.get('/optionone').then(response =&gt;.
  • Si vous souhaitez que les données de la base de données s'affichent correctement après les noms de colonnes, vous devez définir la largeur lors de la définition des paramètres pour les deux premiers noms de colonnes et ne pas définir la largeur pour le dernier nom de colonne.
  1. <template>
  2. <el-main>
  3. <el-container>
  4. <Bar />
  5. <el-table :data="information">
  6. <el-table-column prop="users" label="Users" width="140" />
  7. <el-table-column prop="sex" label="Sex" width="140" />
  8. <el-table-column prop="mood" label="mood" />
  9. </el-table>
  10. <!-- 根据当前的路由显示内容 -->
  11. <router-view></router-view>
  12. </el-container>
  13. </el-main>
  14. </template>
  15. <script>
  16. //import axios from 'axios';
  17. import Bar from './Bar.vue';
  18. export default {
  19. data() {
  20. return {
  21. information: []
  22. };
  23. },
  24. created() {
  25. this.getUserList();
  26. },
  27. methods: {
  28. getUserList() {
  29. this.$http.get('/optionone').then(response => {
  30. console.log(response.data);
  31. this.information = response.data;
  32. })
  33. .catch(error => {
  34. console.log(error);
  35. });
  36. }
  37. },
  38. // mounted() {
  39. // axios.get('http://localhost:3000/api/users')
  40. // .then(response => {
  41. // this.users = response.data;
  42. // })
  43. // .catch(error => {
  44. // console.error('Error fetching users:', error);
  45. // });
  46. // },
  47. name: 'OptionOneComponent',
  48. components: {
  49. Bar
  50. }
  51. };
  52. </script>
  53. <style>
  54. .layout-container-demo .el-header {
  55. position: relative;
  56. background-color: var(--el-color-primary-light-7);
  57. color: var(--el-text-color-primary);
  58. }
  59. .layout-container-demo .el-main {
  60. padding: 0;
  61. }
  62. .layout-container-demo .toolbar {
  63. display: inline-flex;
  64. align-items: center;
  65. justify-content: center;
  66. height: 100%;
  67. right: 20px;
  68. }
  69. </style>

Bien sûr, je peux répondre à ces questions pour vous :

### 1. Comprendre le rôle de chaque fichier et comment ils fonctionnent ensemble

**db.js (fichier de configuration de la base de données principale)**
- Fonction : Créer et exporter un pool de connexions à la base de données MySQL.
- Comment ils fonctionnent ensemble : utilisé par index.js pour effectuer des opérations de base de données.

**index.js (fichier principal du serveur backend)**
- Rôle : Mettre en place le serveur Express, configurer le routage et le middleware, et gérer les requêtes API.
- Comment travailler ensemble : utilisez db.js pour vous connecter à la base de données et répondre aux demandes du front-end.

**main.js (fichier principal frontal)**
- Fonction : Créer une application Vue, configurer Vue Router et axios et monter l'application.
- Comment cela fonctionne ensemble : utilisez Element Plus et Vue Router pour améliorer l'interface utilisateur et la navigation, avec axios utilisé pour communiquer avec le backend.

**index.js (fichier de configuration du routeur Vue)**
- Fonction : Définir le routage front-end et spécifier les composants Vue correspondant aux différents chemins.
- Comment travailler ensemble : intégrez l'instance Vue dans main.js pour implémenter le routage des pages.

### 2. Montrez comment démarrer les serveurs backend et frontend

**Démarrez le serveur backend** :
- Exécutez `node index.js` pour démarrer le serveur Express.
- Assurez-vous que le service MySQL est en cours d'exécution.

**Démarrez le serveur frontal** :
- Si vous utilisez Vue CLI, exécutez « npm run serve » pour démarrer le serveur de développement rechargé à chaud.
- Accédez à l'adresse spécifiée dans le navigateur (généralement localhost et un certain port) pour afficher l'application frontale.

### 3. Afficher la page frontale et le processus d'interaction de l'utilisateur

- Lorsque l'utilisateur ouvre l'application, Vue Router restituera le composant correspondant en fonction de l'URL.
- L'utilisateur effectue une opération (comme remplir un formulaire de connexion) et les données sont soumises au backend via le formulaire.
- L'utilisateur voit le résultat de la réponse (connexion réussie ou échouée) et navigue vers différentes pages en fonction du résultat.

### 4. Expliquer le processus de demande et de réponse API

- Le front-end utilise axios pour envoyer des requêtes HTTP au back-end.
- Le serveur backend Express reçoit la requête et effectue les opérations de base de données.
- Le backend renvoie les résultats de la requête de base de données ou les informations d'erreur au frontend en réponse.
- Le frontal reçoit la réponse et met à jour l'état de la page ou affiche des informations en fonction de la réponse.

### 5. Discutez des technologies clés utilisées dans le projet

- **Vue Router** : gère le routage frontal et implémente la navigation entre les pages dans les applications monopage.
- **axios** : utilisé pour envoyer des requêtes HTTP et traiter les réponses du front-end vers le back-end.
- **Express** : framework d'application Web Node.js, utilisé pour créer des serveurs back-end et gérer les requêtes API.
- **MySQL** : Système de gestion de bases de données relationnelles, utilisé pour stocker et interroger les données.

### 6. Préparez les réponses à certaines questions fréquemment posées

**Comment gérer CORS ? **
- Utilisez le middleware Cors pour permettre à des domaines externes spécifiques d'accéder à l'API.

**Comment mettre en œuvre l'authentification des utilisateurs ? **
- L'API backend peut vérifier les informations d'authentification (telles que les jetons JWT) dans la demande pour vérifier l'identité de l'utilisateur.

**Comment assurer la sécurité des données ? **
- Transférez des données cryptées via HTTPS.
- Les mots de passe des utilisateurs sont hachés et stockés.
- Validez toutes les entrées utilisateur pour empêcher les attaques telles que l'injection SQL.

Grâce aux réponses ci-dessus, vous devriez être en mesure d'avoir une compréhension claire du principe de fonctionnement et du processus de mise en œuvre du projet, et d'être prêt pour la défense.