Condivisione della tecnologia

Esercitati nello sviluppo web front-end e back-end durante le vacanze estive - note

2024-07-12

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

(Principalmente sviluppo front-end, non back-end. Vorrei innanzitutto presentare un progetto che implementa front-end e back-end)

1. Installa ed esegui il progetto MoreMall

1.Introduzione al progetto MoreMall

Il front-end e il back-end possono interagire tra loro, front-end: client, back-end: server; il database può essere scritto in mall.sql.

2.Configurazione dell'ambiente


1) Installa Node.js: Node.js è unAmbiente di esecuzione JavaScript , per creare applicazioni lato server. Scarica e installa la versione appropriata di Node.js sul sito Web ufficiale [Node.js](https://nodejs.org/). La configurazione dell'ambiente di node.js è relativamente complessa.

2) Installa mysql
3) Installa le dipendenze: esegui `npm install` nella directory root del progetto, che verrà eseguitaIl file `package.json` installa tutte le dipendenze richieste per il progetto.

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

2. Crea un progetto Vue

1. Crea un progetto utilizzando Vue CLI

1) Installa e crea il progetto vue: crea una nuova cartella per inserire il file di progetto - cmd nella directory dei file - `vue create my-project`
2) Struttura della directory del progetto: La directory "src" contiene sottodirectory come "components" e "views", che vengono utilizzate per memorizzare componenti e pagine.

3) dentro<template>Scrittura dei dati nello script
- **Definisci dati**: nel componente Vue` <script>`部分定义数据,通过`data`函数返回数据对象。
- **Visualizza dati**: nel componente Vue`<template> `Uso parziale delle espressioni di interpolazione`{{ }}` o il comando `v-bind` ecc. per visualizzare i dati.

Esempio: componente—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. Installa e utilizza vue-router

Qui è mostrato il routetest del progetto

1. Installa vue-router


1) Installazione: cmd nella directory del file di progetto in cui vuoi aggiungere questa cosa - `npm install vue-router`
2) Configura il routing: configura le regole di routing in `src/router/index.js` per mappare percorsi diversi a componenti diversi.

Esempio:

Codice nel file 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) Utilizzare<router-link>E<router-view>
<router-link>: Utilizzato per creare collegamenti di navigazione, che possono essere spostati alla pagina di routing corrispondente dopo aver fatto clic.
<router-view>: Utilizzato per visualizzare i componenti di instradamento corrispondenti.

Esempio: 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>

Visualizzazione della pagina: (prestare attenzione al numero di porta)

Barra dei clic: Allora perché il mio numero di porta si chiama "/bar"?

Perché ricordi dove è configurato il router, qual è il percorso. Il nome qui può essere scelto casualmente, ma generalmente è coerente con il nome del componente e il nome del componente non può essere modificato e il nome corrispondente è componente-xx.vue. .

Perché fare clic per saltare? Per questo motivo<router-link> ,E<router-view> La funzione specifica della pagina verrà discussa in seguito.

4. Costruisci la prima applet Element-Plus

1. Utilizzare il router+elemento-più sopra

element-plus può essere inteso come una serie di pacchetti pacchettizzati per il rendering della pagina front-end (il pacchetto universale può essere inteso in questo modo, i programmatori non sono programmatori, siamo solo portatori di pacchetti)

2. Come utilizzare il codice componente

Clicca sul sito ufficialePanoramica Panoramica dei componenti |. Element Plus (element-plus.org)

 

3.Installare element-plus


1) Installazione: cmd—`npm install element-plus` nel file di progetto che desideri utilizzare.
2) Introduci element-plus: Introduci Element Plus e i file di stile in `main.js`

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


3) Utilizzare i componenti: utilizzare i componenti dell'interfaccia utente Element Plus nei componenti Vue, come `<el-button> ",".<el-input> "Aspetta."

Esempio: App.vue, comunque, con<el->L'inizio è

  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) Spiegalo qui<router-view> effetto:

Vedi dove è andato il numero "3" nell'immagine sopra dopo aver regolato la sua posizione. Inteso come segnaposto.

  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. Anche qui viene implementato il salto di pagina, come


1) Configurazione del routing: configura il routing in `src/router/index.js`, ogni percorso corrisponde a un componente.

Esempio: A proposito, se il percorso è '/', significa che la prima pagina che arriva è questa.

Non sembra dire come eseguire il progetto: cmd-npm run serve nella directory del file di progetto

  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) Collegamenti di navigazione: utilizzare `<router-link> `Crea un collegamento di navigazione, fai clic su di esso per passare alla pagina corrispondente, utilizza`<router-view> `Visualizza i componenti di routing.

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

5. Uso combinato di Vue-router, element-plus e axios

1. Installare Axios

1) Come sopra, comando di installazione: `npm install axios`
2) Configura axios: configura l'istanza di axios in `main.js`, imposta il baseURL predefinito e altre configurazioni globali.

2. Implementare mini programmi front-end e back-end


- **Interfaccia di definizione**: definisce l'interfaccia API sul lato server, elabora la richiesta front-end e restituisce i dati.
- **Dati richiesta front-end**: utilizzare axios nel componente front-end per inviare una richiesta, ottenere dati e visualizzarli sulla pagina.
- **Commutazione dinamica dei dati**: combina i componenti Element Plus e Vue Router per realizzare la commutazione dinamica dei dati del menu, ad esempio la visualizzazione di contenuti diversi in base alle diverse voci di menu.

Passaggi specifici:
1) Crea un'istanza axios e configura:

  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) Utilizzare axios nel componente Vue per inviare la richiesta:
  

  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) Combina Element Plus e Vue Router per implementare il menu dinamico: come spiegato in precedenza.

3.Cosa fa axios?

Axios è un client HTTP basato su Promise per richieste HTTP nei browser e negli ambienti Node.js. Consente di inviare richieste asincrone in modo più conveniente ed elaborare i dati di risposta. In un progetto Vue.js, puoi utilizzare Axios per comunicare con l'API back-end, ad esempio ottenendo dati, inviando dati di moduli, elaborando caricamenti di file e altre operazioni. axios fornisce una semplice API che supporta intercettatori di richieste e risposte, cancellazione di richieste, configurazione globale e altre funzioni, rendendo l'interazione dei dati tra front-end e back-end più efficiente e controllabile.

1) Per prima cosa aggiungi un src/server/index.js basato sul progetto precedente come segue

  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. });

Descrizione di questo codice:

Questo frammento di codice utilizza Node.js e il framework Express per creare un semplice server. Ecco una spiegazione riga per riga del codice:

1. **Importa il modulo Express e crea un'istanza dell'applicazione**:
```javascript
const express = require('espresso');
const app = express();
   ```

- "express" è un framework per la creazione di applicazioni web. Qui viene importato tramite `require('express')` e viene creata un'istanza dell'applicazione tramite `express()`.

2. **Imposta la porta di ascolto del server**:
```javascript
const port = 3000; // Puoi scegliere qualsiasi porta non occupata
   ```

- La variabile `port` definisce il numero di porta su cui è in ascolto il server, qui è impostato su "3000".

3. **Impostazioni del middleware che consentono richieste tra domini**:
```javascript
app.use((req, res, next) =&gt; {
res.header("Origine-consenti-controllo-accesso", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
Prossimo();
   });  
   ```

- Questo codice configura un middleware per consentire richieste multiorigine (CORS). Consente richieste da qualsiasi origine e consente determinati campi di intestazione. La funzione "next()" garantisce che la richiesta continui al middleware successivo o al gestore del percorso.

4. **Definire percorsi e risposte**:
```javascript
app.get('/', (req, res) =&gt; {
//Crea un oggetto contenente i dati che desideri restituire
dati costanti = [
{ id: 1, nome: 'Alice', età: 18, email: '[email protected]' },
{ id: 2, nome: 'Bob', età: 19, email: '[email protected]' },
// ...più utenti
     ];  
     
// Utilizza il metodo res.json() per inviare la risposta JSON
res.json(dati);
   });  
   ```

- `app.get('/', ...)` definisce un percorso per le richieste GET. Quando il client accede al percorso root `/`, verrà chiamata questa funzione di gestione.
- La funzione del gestore crea un oggetto "data" contenente i dati dell'utente e lo restituisce al client come risposta JSON utilizzando "res.json(data)".

5. **Avvia il server**:
```javascript
app.listen(porta, () =&gt; {
console.log(`Il server è in esecuzione su http://localhost:${port}`);
   });  
   ```

- `app.listen(port, ...)` avvia il server e lo lascia in ascolto sulla porta definita.
- Quando il server si avvia correttamente, viene visualizzato un messaggio sulla console che indica che il server è in esecuzione ed è accessibile tramite "http://localhost:3000".

Riepilogo: questo frammento di codice crea un semplice server Express che risponde alle richieste GET nel percorso root "/" e restituisce una risposta JSON contenente i dati dell'utente. Viene inoltre configurato un middleware per consentire richieste interdominio. Eseguendo questo server sulla porta "3000", puoi utilizzare un browser o un altro client HTTP per accedere a "http://localhost:3000" e visualizzare i dati JSON restituiti.

2) Correre

cmd: nodo index.js nella directory dei file del server

Può vedere i dati in background

Quindi esegui cmd-npm run serve nella directory del file di progetto e puoi vedere che ci sono dati! !

Come gestisco i dati di backend?

Proprio nel file server/index.js appena aggiunto:

  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. ];

Sulla base di sei e cinque, più il backend

Come eseguire i cinque progetti insieme al backend del primo progetto MoreMall consiste nel combinare il front-end e il back-end.

1. Prepara due cose

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) server

Mettilo nel file scr, ma può anche essere messo in parallelo. L'ho lasciato andare prima e non l'ho cancellato. Comunque, npm run serve è possibile anche in directory di file diverse.

Due file sotto il server:

(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

illustrare:

Lo scopo di questo codice è utilizzare Node.js e il modulo "mysql" per creare un pool di connessioni a un database MySQL ed esportarlo per l'utilizzo in altri moduli.

La spiegazione specifica è la seguente:

1. **Importa il modulo `mysql`**:
```javascript
lascia mysql = require('mysql');
   ```
Questa riga di codice importa il modulo "mysql", che è una libreria Node.js utilizzata per connettersi e gestire i database MySQL.

2. **Crea un pool di connessioni**:
```javascript
lascia db = mysql.createPool({
host: '127.0.0.1',
utente: 'root',
porta: '3306',
password: 'root',
banca dati: 'prova'
   });
   ```
Questo codice crea un pool di connessioni utilizzando il metodo `mysql.createPool`. Un pool di connessioni è un insieme di connessioni al database che possono essere condivise e riutilizzate da più client. La creazione di un pool di connessioni può migliorare le prestazioni poiché evita di ristabilire la connessione al database a ogni richiesta.

- `host: '127.0.0.1'`: l'indirizzo host del server del database. Questo è il server locale.
- `utente: 'root'`: nome utente del database.
- `port: '3306'`: numero di porta del database. La porta predefinita per MySQL è 3306.
- `password: 'root'`: password del database.
- `database: 'test'`: il nome del database da connettere.

3. **Esporta pool di connessioni**:
```javascript
modulo.esportazioni = db;
   ```
Questa riga di codice esporta l'oggetto del pool di connessioni "db" in modo che altri moduli possano importare e utilizzare questo pool di connessioni tramite il metodo "require".

Utilizzando questo pool di connessioni, è possibile introdurlo in altri moduli e utilizzarlo per eseguire query sul database. Per esempio:

```javascript
//Introdurre il pool di connessioni al database
const db = require('./percorso/verso/questo/modulo');

//Esegue la query del database
db.query('SELECT * FROM utente', (err, risultati) =&gt; {
se (erro) {
console.error('Errore durante l'esecuzione della query:', err);
ritorno;
    }
console.log('Risultati della query:', risultati);
});
```

Questo metodo semplifica la gestione e l'utilizzo delle connessioni al database, soprattutto nelle applicazioni che richiedono un accesso frequente al database.

(2) indice.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. Integra la conoscenza dei principianti

Se non capisci, leggi di più:/

  • Terminale di servizio

    • Crea un server Express e imposta un pool di connessioni al database.
    • Configurare un middleware che consenta richieste tra domini.
    • Definire un percorso GET per interrogare il database e restituire dati.
  • cliente

    • Utilizza Axios per inviare richieste HTTP al server nel componente Vue.
    • Ottieni i dati e visualizzali sulla pagina.

"Utilizzando questo pool di connessioni, puoi introdurlo in altri moduli e utilizzarlo per eseguire query sul database." - Quali sono gli altri moduli?

È il codice lato server nel server.

In questo contesto, "altri moduli" si riferisce solitamente ad altri file JavaScript nel tuo progetto Node.js, non all'interno del file `.vue` del componente Vue. Nello specifico, questi altri moduli sono in genere codice lato server che gestisce le richieste HTTP e le interazioni del database.

Una tipica struttura di progetto potrebbe assomigliare a questa:

```
progetto/
├── server/
│ ├── db.js // Il codice del pool di connessione al database che hai fornito
│ ├── rotte.js // Modulo che definisce il routing API
│ └── server.js // Il file che avvia il server, quello a cui corrispondo qui è
└── cliente/
├── origine/
│ ├── componenti/
│ │ ├── YourComponent.vue // Il tuo componente Vue
│ ├── main.js // File di ingresso del progetto Vue
│ └── ... // Altri file front-end
└── pacchetto.json
```

In questa struttura, la cartella "server/" contiene il codice lato server, mentre la cartella "client/" contiene il codice Vue front-end.

### Esempio: utilizzo del pool di connessioni al database sul lato server

Supponendo che tu abbia già un file `server/db.js` che definisce un pool di connessioni al database, puoi introdurlo e utilizzarlo nel file `server/routes.js`:

```javascript
// server/routes.js
const express = require('espresso');
const db = require('./db'); //Introduce il pool di connessioni al database

const router = express.Router();//Non mi serve questa sezione di routers.js Le altre parti sono messe insieme in index.js e insieme realizziamo "l'introduzione di un pool di connessione al database che imposta le impostazioni tra domini". in base alle esigenze" Accesso? -Imposta routing-(scopo finale) avvia server"

//Definisce un percorso di esempio
router.get('/utenti', (req, res) =&gt; {
db.query('SELECT * FROM utente', (err, risultati) =&gt; {
se (erro) {
restituisci res.status(500).json({ errore: err.message });
        }
res.json(risultati);
    });
});

modulo.esportazioni = router;
```

Quindi, configura e avvia il server Express nel file `server/server.js` e utilizza i percorsi definiti:

```javascript
// server/server.js
const express = require('espresso');
const app = express();
const percorsi = require('./routes'); //Introduce percorsi definiti

app.use('/api', Routes); // Usa il routing

porta costante = 3000;
app.listen(porta, () =&gt; {
console.log(`Il server è in esecuzione su http://localhost:${port}`);
});
```

### Utilizzo dell'API nei componenti Vue

Nel tuo componente Vue, puoi utilizzare Axios per inviare richieste HTTP all'API definita sopra:

```vista
<template>
  <div>
<h2>Utenti</h2>
    <ul>
      <li v-for="user in users" :key="user.id">
        {{nome.utente}} - {{ utente.email }}
      </li>
    </ul>
  </div>
</template>

<script>
importa axios da 'axios';

esporta predefinito {
dati() {
ritorno {
utenti: []
    };
  },
montato() {
axios.get('http://localhost:3000/api/utenti')
.then(risposta =&gt; {
questo.utenti = risposta.dati;
      })
.catch(errore =&gt; {
console.error('Errore durante il recupero degli utenti:', error);
      });
  }
};
</script>
```

In questo modo, separando la logica front-end e back-end, è possibile organizzare e gestire al meglio il codice, garantendo al tempo stesso che il lato server gestisca le interazioni con il database, mentre il front-end gestisca l'acquisizione e la visualizzazione dei dati tramite API.

3.

1) Il server deve essere in ascolto! ! Solo durante il monitoraggio puoi eseguire il progetto e vedere i dati in background. Solo i seguenti passaggi:

Comando Project/src/sserver/——cmd——node index.js, avvia la visualizzazione

Un corretto monitoraggio evidenzia:

In secondo luogo, ho scoperto che potevo usarehttp://localhost:3000/api/utentiVedo i dati JSON corretti, ma non riesco a utilizzare http://localhost:3000 La soluzione è la seguente:

Modifica opzioneOne.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. Come aggiungere la pagina di accesso

Innanzitutto, aggiungi alla cartella asset: img è l'immagine della pagina a cui hai effettuato l'accesso all'inizio e la cartella css

Quindi aggiungi Login.vue, il router di Login

L'ultimo passo è aggiustare la pagina precedente, separare App.vue (totale), incapsularlo, disegnare una cornice sul lato sinistro della pagina per creare una Bar.vue separata, e poi se vuoi vedere questa barra su ogni pagina, è necessario aggiungerlo ad ogni pagina. Aggiungere un riferimento a Bar.vue nel file .vue.

Esempio:

opzioneDue.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>

opzioneUno.vue:

  • Sebbene<script>里面import了Bar,但是模块中也要用<Bar />
  • Commenta import axios perché questa frase ha lo stesso effetto di this.$http.get('/optionone').then(response =&gt;.
  • Se si desidera che i dati nel database vengano visualizzati correttamente dopo i nomi delle colonne, è necessario impostare la larghezza quando si impostano i parametri per i primi due nomi di colonna e non impostare la larghezza per l'ultimo nome di colonna.
  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>

Naturalmente posso rispondere a queste domande:

### 1. Comprendere il ruolo di ciascun file e il modo in cui interagiscono

**db.js (file di configurazione del database backend)**
- Funzione: crea ed esporta un pool di connessioni al database MySQL.
- Come lavorano insieme: utilizzati da index.js per eseguire operazioni sul database.

**index.js (file principale del server backend)**
- Ruolo: imposta il server Express, configura il routing e il middleware e gestisci le richieste API.
- Come lavorare insieme: utilizza db.js per connettersi al database e rispondere alle richieste dal front-end.

**main.js (file principale front-end)**
- Funzione: crea l'applicazione Vue, configura Vue Router e axios e monta l'applicazione.
- Come funziona insieme: utilizza Element Plus e Vue Router per migliorare l'interfaccia utente e la navigazione, con axios utilizzati per comunicare con il backend.

**index.js (file di configurazione del router Vue)**
- Funzione: definire il routing front-end e specificare i componenti Vue corrispondenti a percorsi diversi.
- Come lavorare insieme: integrazione con l'istanza Vue in main.js per implementare il routing della pagina.

### 2. Dimostrare come avviare i server backend e frontend

**Avvia il server backend**:
- Esegui `node index.js` per avviare il server Express.
- Assicurati che il servizio MySQL sia in esecuzione.

**Avvia il server front-end**:
- Se si utilizza la CLI Vue, eseguire `npm run serve` per avviare il server di sviluppo ricaricato a caldo.
- Accedi all'indirizzo specificato nel browser (solitamente localhost e una determinata porta) per visualizzare l'applicazione front-end.

### 3. Visualizza la pagina front-end e il processo di interazione con l'utente

- Quando l'utente apre l'applicazione, Vue Router renderà il componente corrispondente in base all'URL.
- L'utente esegue un'operazione (come la compilazione di un modulo di accesso) e i dati vengono inviati al backend tramite il modulo.
- L'utente vede il risultato della risposta (accesso riuscito o non riuscito) e naviga verso pagine diverse in base al risultato.

### 4. Spiegare il processo di richiesta e risposta API

- Il front-end utilizza axios per inviare richieste HTTP al back-end.
- Il server backend Express riceve la richiesta ed esegue operazioni sul database.
- Il backend invia i risultati delle query del database o le informazioni sugli errori al frontend come risposta.
- Il front-end riceve la risposta e aggiorna lo stato della pagina o visualizza informazioni in base alla risposta.

### 5. Discutere le tecnologie chiave utilizzate nel progetto

- **Vue Router**: gestisce il routing front-end e implementa la navigazione delle pagine nelle applicazioni a pagina singola.
- **axios**: utilizzato per inviare richieste HTTP ed elaborare le risposte dal front-end al back-end.
- **Express**: framework di applicazioni web Node.js, utilizzato per creare server back-end e gestire le richieste API.
- **MySQL**: sistema di gestione di database relazionali, utilizzato per archiviare ed interrogare i dati.

### 6. Prepara le risposte ad alcune domande frequenti

**Come affrontare il CORS? **
- Utilizzare il middleware cors per consentire a domini esterni specifici di accedere all'API.

**Come implementare l'autenticazione utente? **
- L'API di backend può controllare le informazioni di autenticazione (come i token JWT) nella richiesta per verificare l'identità dell'utente.

**Come garantire la sicurezza dei dati? **
- Trasferisci dati crittografati utilizzando HTTPS.
- Le password degli utenti vengono sottoposte ad hashing e archiviate.
- Convalida tutti gli input dell'utente per prevenire attacchi come l'iniezione SQL.

Attraverso le risposte di cui sopra, dovresti essere in grado di avere una chiara comprensione del principio di funzionamento e del processo di implementazione del progetto ed essere pronto per la difesa.