Technologieaustausch

Üben Sie die Web-Frontend- und Back-End-Entwicklung während der Sommerferien – Notizen

2024-07-12

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

(Hauptsächlich Front-End-Entwicklung, nicht Back-End. Lassen Sie mich zunächst ein Projekt vorstellen, das Front-End und Back-End implementiert.)

1. Installieren Sie das Projekt MoreMall und führen Sie es aus

1.Einführung in das Projekt MoreMall

Das Front-End und das Back-End können miteinander interagieren, Front-End: Client, Back-End: Server; die Datenbank kann in mall.sql geschrieben werden.

2. Umgebungseinrichtung


1) Node.js installieren: Node.js ist einJavaScript-Laufzeitumgebung , zum Erstellen serverseitiger Anwendungen. Laden Sie die entsprechende Version von Node.js von der offiziellen Website [Node.js](https://nodejs.org/) herunter und installieren Sie sie. Die Umgebungskonfiguration von node.js ist relativ komplex.

2) Installieren Sie MySQL
3) Abhängigkeiten installieren: Führen Sie „npm install“ im Stammverzeichnis des Projekts ausDie Datei „package.json“ installiert alle für das Projekt erforderlichen Abhängigkeiten.

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

2. Erstellen Sie ein Vue-Projekt

1. Erstellen Sie ein Projekt mit Vue CLI

1) Installieren und erstellen Sie das Vue-Projekt: Erstellen Sie einen neuen Ordner, um die Projektdatei – cmd – im Dateiverzeichnis abzulegen – „vue create my-project“.
2) Projektverzeichnisstruktur: Das Verzeichnis „src“ enthält Unterverzeichnisse wie „components“ und „views“, die zum Speichern von Komponenten und Seiten verwendet werden.

3) im<template>Daten im Skript schreiben
- **Daten definieren**: in der Vue-Komponente <script>`部分定义数据,通过`data`函数返回数据对象。
- **Daten anzeigen**: in der Vue-Komponente<template> „Teilweise Verwendung von Interpolationsausdrücken“{{ }}` oder Befehl `v-bind` usw., um Daten anzuzeigen.

Beispiel: Komponente – 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. Installieren und verwenden Sie den Vue-Router

Hier ist das Projekt routetest zu sehen

1. Vue-Router installieren


1) Installation: cmd unter dem Projektdateiverzeichnis, in dem Sie dieses Ding hinzufügen möchten – „npm install vue-router“.
2) Routing konfigurieren: Konfigurieren Sie Routing-Regeln in „src/router/index.js“, um verschiedene Pfade verschiedenen Komponenten zuzuordnen.

Beispiel:

Code in der Datei 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) Verwendung<router-link>Und<router-view>
<router-link>: Wird zum Erstellen von Navigationslinks verwendet, die nach dem Klicken auf die entsprechende Routing-Seite umgeschaltet werden können.
<router-view>: Wird verwendet, um die übereinstimmenden Routing-Komponenten anzuzeigen.

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

Seitendarstellung: (Achten Sie auf die Portnummer)

Click bar: Warum heißt dann meine Portnummer „/bar“?

Da Sie sich daran erinnern, wo der Router konfiguriert ist, ist dies der Pfad. Der Name kann hier zufällig ausgewählt werden, stimmt jedoch im Allgemeinen mit dem Komponentennamen überein und der Komponentenname kann nicht geändert werden. Der entsprechende Name lautet „component-xx.vue“. .

Warum klicken, um zu springen? Aus diesem Grund<router-link> ,Und<router-view> Die spezifische Funktion auf der Seite wird später besprochen.

4. Erstellen Sie das erste Element-Plus-Applet

1. Verwenden Sie den Router+Element-Plus oben

element-plus kann als eine Reihe gepackter Pakete für das Rendern von Front-End-Seiten verstanden werden (das universelle Paket kann so verstanden werden: Programmierer sind keine Programmierer, wir sind nur Paketträger).

2. Verwendung ihres Komponentencodes

Klicken Sie auf die offizielle WebsiteÜbersicht Komponentenübersicht |. Element Plus (element-plus.org)

 

3. Element-Plus installieren


1) Installation: cmd – „npm install element-plus“ in der Projektdatei, die Sie verwenden möchten.
2) Element-Plus einführen: Element Plus und Style-Dateien in „main.js“ einführen

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


3) Komponenten verwenden: Verwenden Sie Element Plus-UI-Komponenten in Vue-Komponenten, z. B. „<el-button> `,`<el-input> „Warte.

Beispiel: App.vue jedenfalls mit<el->Der Anfang ist

  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) Erklären Sie es hier<router-view> Wirkung:

Sie sehen, wohin „3“ im Bild oben ging, nachdem ich ihre Position angepasst habe. Als Platzhalter verstanden.

  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. Der Seitensprung wird auch hier implementiert, wie


1) Routing-Konfiguration: Konfigurieren Sie das Routing in „src/router/index.js“, jede Route entspricht einer Komponente.

Beispiel: Wenn der Pfad übrigens „/“ ist, bedeutet das, dass die erste Seite, die hereinkommt, diese ist.

Es scheint nicht zu sagen, wie das Projekt ausgeführt werden soll: „cmd-npm“ führt „serve“ im Projektdateiverzeichnis aus

  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) Navigationslinks: Verwenden Sie „<router-link> „Navigationslink erstellen, darauf klicken, um zur entsprechenden Seite zu springen, verwenden“.<router-view> `Routing-Komponenten anzeigen.

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

5. Kombinierter Einsatz von Vue-Router, Element-Plus und Axios

1. Axios installieren

1) Wie oben, Installationsbefehl: „npm install axios“.
2) Axios konfigurieren: Axios-Instanz in „main.js“ konfigurieren, die Standard-BaseURL und andere globale Konfigurationen festlegen.

2. Implementieren Sie Front-End- und Back-End-Miniprogramme


- **Schnittstelle definieren**: Definieren Sie die API-Schnittstelle auf der Serverseite, verarbeiten Sie die Front-End-Anfrage und geben Sie Daten zurück.
- **Front-End-Anfragedaten**: Verwenden Sie Axios in der Front-End-Komponente, um eine Anfrage zu senden, Daten abzurufen und sie auf der Seite anzuzeigen.
- **Dynamische Datenumschaltung**: Kombinieren Sie Element Plus-Komponenten und Vue Router, um eine dynamische Datenumschaltung des Menüs zu realisieren, z. B. die Anzeige unterschiedlicher Inhalte je nach Menüpunkt.

Spezifische Schritte:
1) Erstellen Sie eine Axios-Instanz und konfigurieren Sie:

  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) Verwenden Sie axios in der Vue-Komponente, um die Anfrage zu senden:
  

  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) Kombinieren Sie Element Plus und Vue Router, um ein dynamisches Menü zu implementieren: Wie bereits erläutert.

3.Was macht Axios?

Axios ist ein Promise-basierter HTTP-Client für HTTP-Anfragen in Browsern und Node.js-Umgebungen. Damit können Sie asynchrone Anfragen bequemer senden und Antwortdaten verarbeiten. In einem Vue.js-Projekt können Sie Axios verwenden, um mit der Back-End-API zu kommunizieren, z. B. Daten abzurufen, Formulardaten zu senden, Datei-Uploads zu verarbeiten und andere Vorgänge durchzuführen. axios bietet eine einfache API, die Anforderungs- und Antwort-Interceptoren, Anforderungsstornierung, globale Konfiguration und andere Funktionen unterstützt und so die Dateninteraktion zwischen Front- und Back-End effizienter und kontrollierbarer macht.

1) Fügen Sie zunächst wie folgt eine src/server/index.js basierend auf dem vorherigen Projekt hinzu

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

Beschreibung dieses Codes:

Dieses Code-Snippet verwendet Node.js und das Express-Framework, um einen einfachen Server zu erstellen. Hier ist eine zeilenweise Erklärung des Codes:

1. **Importieren Sie das Express-Modul und erstellen Sie eine Anwendungsinstanz**:
```Javascript
const express = erfordern('express');
const app = express();
   ```

- „Express“ ist ein Framework zum Erstellen von Webanwendungen. Hier wird über `require('express')` importiert und über `express()` eine Anwendungsinstanz erstellt.

2. **Legen Sie den Server-Überwachungsport fest**:
```Javascript
const port = 3000; // Sie können einen beliebigen freien Port auswählen
   ```

- Die Variable „port“ definiert die Portnummer, auf der der Server lauscht, hier ist sie auf „3000“ gesetzt.

3. **Middleware-Einstellungen, die domänenübergreifende Anfragen ermöglichen**:
```Javascript
app.use((req, res, next) =&gt; {
res.header("Zugriffskontrolle-Origin zulassen", "*");
res.header("Access-Control-Allow-Headers", "Ursprung, X-Requested-With, Inhaltstyp, Akzeptieren");
nächste();
   });  
   ```

– Dieser Code richtet eine Middleware ein, um Cross-Origin-Anfragen (CORS) zu ermöglichen. Es ermöglicht Anfragen von jedem Ursprung und erlaubt bestimmte Header-Felder. Die Funktion „next()“ stellt sicher, dass die Anfrage an die nächste Middleware oder den nächsten Routenhandler weitergeleitet wird.

4. **Routen und Reaktionen definieren**:
```Javascript
app.get('/', (req, res) =&gt; {
//Erstellen Sie ein Objekt mit den Daten, die Sie zurückgeben möchten
const Daten = [
{ ID: 1, Name: ‚Alice‘, Alter: 18, E-Mail: ‚[email protected]‘ },
{ ID: 2, Name: ‚Bob‘, Alter: 19, E-Mail: ‚[email protected]‘ },
// ...mehr Benutzer
     ];  
     
// Verwenden Sie die Methode res.json(), um eine JSON-Antwort zu senden
res.json(Daten);
   });  
   ```

- „app.get('/', ...)“ definiert eine Route für GET-Anfragen. Wenn der Client auf den Root-Pfad „/“ zugreift, wird diese Handler-Funktion aufgerufen.
– Die Handler-Funktion erstellt ein Objekt „data“, das die Benutzerdaten enthält, und gibt es als JSON-Antwort mit „res.json(data)“ an den Client zurück.

5. **Starten Sie den Server**:
```Javascript
app.listen(port, () =&gt; {
console.log(`Der Server läuft auf http://localhost:${port}`);
   });  
   ```

- „app.listen(port, ...)“ startet den Server und lässt ihn den definierten Port abhören.
- Bei erfolgreichem Start des Servers wird eine Meldung an die Konsole ausgegeben, dass der Server läuft und über „http://localhost:3000“ erreichbar ist.

Zusammenfassung: Dieses Code-Snippet erstellt einen einfachen Express-Server, der auf GET-Anfragen an den Root-Pfad „/“ antwortet und eine JSON-Antwort mit den Benutzerdaten zurückgibt. Außerdem wird eine Middleware eingerichtet, um domänenübergreifende Anfragen zu ermöglichen. Wenn Sie diesen Server auf Port „3000“ ausführen, können Sie mit einem Browser oder einem anderen HTTP-Client auf „http://localhost:3000“ zugreifen und die zurückgegebenen JSON-Daten anzeigen.

2) Laufen

cmd – Knoten index.js im Serverdateiverzeichnis

Kann Hintergrunddaten sehen

Führen Sie dann cmd-npm run Serve im Projektdateiverzeichnis aus, und Sie können sehen, dass Daten vorhanden sind! !

Wie verwalte ich Backend-Daten?

Nur in der neu hinzugefügten Datei server/index.js:

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

Auf der Basis von sechs und fünf plus dem Backend

So führen Sie die fünf Projekte zusammen mit dem Backend des ersten Projekts aus. MoreMall besteht darin, das Front- und Backend zu kombinieren.

1. Bereiten Sie zwei Dinge vor

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

Legen Sie es unter die scr-Datei, aber ich habe es auch vorher losgelassen und es nicht gelöscht. Wie auch immer, npm runserv ist auch in anderen Dateiverzeichnissen möglich.

Zwei Dateien unter dem 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

veranschaulichen:

Der Zweck dieses Codes besteht darin, Node.js und das Modul „mysql“ zu verwenden, um einen Verbindungspool zu einer MySQL-Datenbank zu erstellen und ihn zur Verwendung in anderen Modulen zu exportieren.

Die konkrete Erklärung lautet wie folgt:

1. **MySQL-Modul importieren**:
```Javascript
Lassen Sie mysql = erfordern('mysql');
   ```
Diese Codezeile importiert das „mysql“-Modul, eine Node.js-Bibliothek, die zum Herstellen einer Verbindung zu und zum Betreiben von MySQL-Datenbanken verwendet wird.

2. **Erstellen Sie einen Verbindungspool**:
```Javascript
let db = mysql.createPool({
Host: '127.0.0.1',
Benutzer: 'root',
Port: '3306',
Passwort: „root“,
Datenbank: "Test"
   });
   ```
Dieser Code erstellt einen Verbindungspool mit der Methode „mysql.createPool“. Ein Verbindungspool ist eine Reihe von Datenbankverbindungen, die von mehreren Clients gemeinsam genutzt und wiederverwendet werden können. Durch das Erstellen eines Verbindungspools kann die Leistung verbessert werden, da dadurch vermieden wird, dass die Datenbankverbindung bei jeder Anforderung erneut hergestellt werden muss.

- `host: '127.0.0.1'`: Die Hostadresse des Datenbankservers. Dies ist der lokale Server.
- `Benutzer: 'root'`: Datenbankbenutzername.
- `port: '3306'`: Datenbank-Portnummer. Der Standardport für MySQL ist 3306.
- `Passwort: 'root'`: Datenbankpasswort.
- `database: 'test'`: Der Name der Datenbank, die verbunden werden soll.

3. **Verbindungspool exportieren**:
```Javascript
modul.exporte = db;
   ```
Diese Codezeile exportiert das Verbindungspoolobjekt „db“, sodass andere Module diesen Verbindungspool über die Methode „require“ importieren und verwenden können.

Mithilfe dieses Verbindungspools können Sie ihn in andere Module einführen und zur Durchführung von Datenbankabfragen verwenden. Zum Beispiel:

```Javascript
//Datenbankverbindungspool einführen
const db = require('./Pfad/zu/diesem/Modul');

//Datenbankabfrage ausführen
db.query('SELECT * FROM Benutzer', (err, Ergebnisse) =&gt; {
wenn (Fehler) {
console.error('Fehler beim Ausführen der Abfrage:', err);
zurückkehren;
    }
console.log('Abfrageergebnisse:', Ergebnisse);
});
```

Diese Methode vereinfacht die Verwaltung und Nutzung von Datenbankverbindungen, insbesondere in Anwendungen, die häufigen Datenbankzugriff erfordern.

(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. Ergänzen Sie das Anfängerwissen

Wenn Sie es nicht verstehen, lesen Sie einfach weiter:/

  • Service-Terminal

    • Erstellen Sie einen Express-Server und richten Sie einen Datenbankverbindungspool ein.
    • Richten Sie Middleware ein, die domänenübergreifende Anfragen ermöglicht.
    • Definieren Sie eine GET-Route, um die Datenbank abzufragen und Daten zurückzugeben.
  • Klient

    • Verwenden Sie Axios, um HTTP-Anfragen an den Server in der Vue-Komponente zu senden.
    • Holen Sie sich die Daten und zeigen Sie sie auf der Seite an.

„Mithilfe dieses Verbindungspools können Sie ihn in andere Module einführen und zur Durchführung von Datenbankabfragen verwenden.“ – Was sind die anderen Module?

Es handelt sich um den serverseitigen Code im Server.

In diesem Zusammenhang bezieht sich „andere Module“ normalerweise auf andere JavaScript-Dateien in Ihrem Node.js-Projekt, nicht auf die Datei „.vue“ der Vue-Komponente. Konkret handelt es sich bei diesen anderen Modulen typischerweise um serverseitigen Code, der HTTP-Anfragen und Datenbankinteraktionen verarbeitet.

Eine typische Projektstruktur könnte wie folgt aussehen:

```
Projekt/
├── Server/
│ ├── db.js // Der von Ihnen angegebene Datenbankverbindungspoolcode
│ ├── Routes.js // Modul, das API-Routing definiert
│ └── server.js // Die Datei, die den Server startet, was ich hier bespreche
└── Kunde/
├── Quelle/
│ ├── Komponenten/
│ │ ├── YourComponent.vue // Ihre Vue-Komponente
│ ├── main.js // Vue-Projekteintragsdatei
│ └── ... // Andere Frontend-Dateien
└── Paket.json
```

In dieser Struktur enthält der Ordner „server/“ den serverseitigen Code, während der Ordner „client/“ den Front-End-Vue-Code enthält.

### Beispiel: Verwendung des Datenbankverbindungspools auf der Serverseite

Angenommen, Sie haben bereits eine Datei „server/db.js“, die einen Datenbankverbindungspool definiert, dann können Sie diese in die Datei „server/routes.js“ einführen und verwenden:

```Javascript
// server/routes.js
const express = erfordern('express');
const db = require('./db'); //Datenbankverbindungspool einführen

const router = express.Router();//Ich habe keine Verwendung für diesen Abschnitt von routers.js. Die anderen Teile werden in index.js zusammengestellt, und zusammen realisieren wir „Einführung eines Datenbankverbindungspools, der domänenübergreifende Einstellungen festlegt“. je nach Bedarf" Zugriff? -Routing festlegen-(endgültiger Zweck) Server starten"

//Definieren Sie eine Beispielroute
router.get('/Benutzer', (req, res) =&gt; {
db.query('SELECT * FROM Benutzer', (err, Ergebnisse) =&gt; {
wenn (Fehler) {
return res.status(500).json({ Fehler: err.message });
        }
res.json(Ergebnisse);
    });
});

modul.exporte = Router;
```

Anschließend richten Sie den Express-Server in der Datei „server/server.js“ ein, starten ihn und verwenden die definierten Routen:

```Javascript
// server/server.js
const express = erfordern('express');
const app = express();
const Routen = require('./routes'); //Definierte Routen einführen

app.use('/api', Routen); // Routing verwenden

konstanter Port = 3000;
app.listen(port, () =&gt; {
console.log(`Der Server läuft auf http://localhost:${port}`);
});
```

### API in Vue-Komponenten verwenden

In Ihrer Vue-Komponente können Sie Axios verwenden, um HTTP-Anfragen an die oben definierte API zu senden:

```Ansicht
<template>
  <div>
<h2>Benutzer</h2>
    <ul>
      <li v-for="user in users" :key="user.id">
        {{ Nutzername }} - {{ Benutzer Email }}
      </li>
    </ul>
  </div>
</template>

<script>
importiere Axios von „Axios“;

Standard exportieren {
Daten() {
zurückkehren {
Benutzer: []
    };
  },
montiert() {
axios.get('http://localhost:3000/api/users')
.dann(Antwort =&gt; {
diese.Benutzer = Antwort.Daten;
      })
.catch(Fehler =&gt; {
console.error('Fehler beim Abrufen der Benutzer:', Fehler);
      });
  }
};
</script>
```

Auf diese Weise können Sie durch die Trennung der Front-End- und Back-End-Logik den Code besser organisieren und verwalten und gleichzeitig sicherstellen, dass die Serverseite die Datenbankinteraktionen abwickelt, während das Front-End die Datenerfassung und -anzeige über die API übernimmt.

3.

1) Der Server muss zuhören! ! Nur bei der Überwachung können Sie das Projekt ausführen und die Hintergrunddaten sehen. Nur die folgenden Schritte:

Project/src/sserver/——cmd——node index.js Befehl, Anzeige starten

Die richtige Überwachung zeigt:

Zweitens fand ich heraus, dass ich es gebrauchen konntehttp://localhost:3000/api/usersIch sehe die korrekten JSON-Daten, kann aber http://localhost:3000 nicht verwenden. Die Lösung lautet wie folgt:

Ändern Sie 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. So fügen Sie eine Anmeldeseite hinzu

Fügen Sie zunächst Folgendes zum Assets-Ordner hinzu: img ist das Seitenbild, das zu Beginn angemeldet war, und der CSS-Ordner

Fügen Sie dann Login.vue, den Router von Login, hinzu

Der letzte Schritt besteht darin, die vorherige Seite anzupassen, App.vue (gesamt) zu trennen, zu kapseln, einen Rahmen auf der linken Seite der Seite zu zeichnen, um eine separate Bar.vue zu erstellen, und dann, wenn Sie diese Bar auf jeder Seite sehen möchten Seite, müssen Sie es zu jeder Seite hinzufügen. Fügen Sie einen Verweis auf Bar.vue in der Datei .vue hinzu.

Beispiel:

optionZwei.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:

  • Obwohl<script>里面import了Bar,但是模块中也要用<Bar />
  • Kommentieren Sie Import-Axios aus, da dieser Satz die gleiche Wirkung hat wie dieser.$http.get('/optionone').then(response =&gt;.
  • Wenn Sie möchten, dass die Daten in der Datenbank nach den Spaltennamen korrekt angezeigt werden, müssen Sie beim Festlegen der Parameter für die ersten beiden Spaltennamen die Breite festlegen und für den letzten Spaltennamen keine Breite festlegen.
  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>

Selbstverständlich kann ich Ihnen diese Fragen beantworten:

### 1. Verstehen Sie die Rolle jeder Datei und wie sie zusammenarbeiten

**db.js (Backend-Datenbankkonfigurationsdatei)**
- Funktion: Erstellen und exportieren Sie einen MySQL-Datenbankverbindungspool.
- Wie sie zusammenarbeiten: Wird von index.js verwendet, um Datenbankoperationen durchzuführen.

**index.js (Hauptdatei des Backend-Servers)**
- Rolle: Express-Server einrichten, Routing und Middleware konfigurieren und API-Anfragen bearbeiten.
- So arbeiten Sie zusammen: Verwenden Sie db.js, um eine Verbindung zur Datenbank herzustellen und auf Anfragen vom Frontend zu antworten.

**main.js (Front-End-Hauptdatei)**
- Funktion: Vue-Anwendung erstellen, Vue-Router und Axios konfigurieren und die Anwendung bereitstellen.
- Wie es zusammenarbeitet: Verwenden Sie Element Plus und Vue Router, um die Benutzeroberfläche und Navigation zu verbessern, wobei Axios für die Kommunikation mit dem Backend verwendet wird.

**index.js (Vue Router-Konfigurationsdatei)**
- Funktion: Definieren Sie das Front-End-Routing und geben Sie Vue-Komponenten an, die verschiedenen Pfaden entsprechen.
- So arbeiten Sie zusammen: Integrieren Sie die Vue-Instanz in main.js, um das Seitenrouting zu implementieren.

### 2. Demonstrieren Sie, wie Sie die Backend- und Frontend-Server starten

**Backend-Server starten**:
- Führen Sie „node index.js“ aus, um den Express-Server zu starten.
- Stellen Sie sicher, dass der MySQL-Dienst ausgeführt wird.

**Starten Sie den Front-End-Server**:
– Wenn Sie die Vue-CLI verwenden, führen Sie „npm run servo“ aus, um den im laufenden Betrieb neu geladenen Entwicklungsserver zu starten.
- Greifen Sie im Browser auf die angegebene Adresse zu (normalerweise localhost und ein bestimmter Port), um die Front-End-Anwendung anzuzeigen.

### 3. Zeigen Sie die Front-End-Seite und den Benutzerinteraktionsprozess an

- Wenn der Benutzer die Anwendung öffnet, rendert Vue Router die entsprechende Komponente entsprechend der URL.
- Der Benutzer führt einen Vorgang aus (z. B. das Ausfüllen eines Anmeldeformulars) und die Daten werden über das Formular an das Backend übermittelt.
- Der Benutzer sieht das Antwortergebnis (Anmeldung erfolgreich oder fehlgeschlagen) und navigiert basierend auf dem Ergebnis zu verschiedenen Seiten.

### 4. Erklären Sie den Prozess der API-Anfrage und -Antwort

- Das Frontend verwendet Axios, um HTTP-Anfragen an das Backend zu senden.
- Der Backend-Express-Server empfängt die Anfrage und führt Datenbankoperationen aus.
- Das Backend sendet die Datenbankabfrageergebnisse oder Fehlerinformationen als Antwort zurück an das Frontend.
- Das Frontend empfängt die Antwort und aktualisiert den Seitenstatus oder zeigt Informationen basierend auf der Antwort an.

### 5. Besprechen Sie die im Projekt verwendeten Schlüsseltechnologien

- **Vue Router**: verwaltet das Front-End-Routing und implementiert die Seitennavigation in Single-Page-Anwendungen.
- **axios**: Wird verwendet, um HTTP-Anfragen zu senden und Antworten vom Front-End an das Back-End zu verarbeiten.
- **Express**: Node.js-Webanwendungsframework, das zum Erstellen von Back-End-Servern und zum Verarbeiten von API-Anfragen verwendet wird.
- **MySQL**: Relationales Datenbankverwaltungssystem, das zum Speichern und Abfragen von Daten verwendet wird.

### 6. Bereiten Sie Antworten auf einige häufig gestellte Fragen vor

**Wie gehe ich mit CORS um? **
– Verwenden Sie die CORS-Middleware, um bestimmten externen Domänen den Zugriff auf die API zu ermöglichen.

**Wie implementiert man die Benutzerauthentifizierung? **
– Die Backend-API kann die Authentifizierungsinformationen (z. B. JWT-Tokens) in der Anfrage überprüfen, um die Identität des Benutzers zu überprüfen.

**Wie gewährleistet man die Datensicherheit? **
- Übertragen Sie Daten verschlüsselt mit HTTPS.
- Benutzerkennwörter werden gehasht und gespeichert.
- Validieren Sie alle Benutzereingaben, um Angriffe wie SQL-Injection zu verhindern.

Durch die obigen Antworten sollten Sie in der Lage sein, das Funktionsprinzip und den Umsetzungsprozess des Projekts klar zu verstehen und für die Verteidigung bereit zu sein.