Compartir tecnología

Practique el desarrollo web front-end y back-end durante las vacaciones de verano: notas

2024-07-12

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

(Principalmente desarrollo front-end, no back-end. Primero, permítanme presentarles un proyecto que implementa front-end y back-end)

1. Instalar y ejecutar el proyecto MoreMall

1.Introducción al proyecto MoreMall

El front-end y el back-end pueden interactuar entre sí, front-end: cliente, back-end: servidor, la base de datos se puede escribir en mall.sql;

2.Configuración del entorno


1) Instale Node.js: Node.js es unEntorno de ejecución de JavaScript , para crear aplicaciones del lado del servidor. Descargue e instale la versión apropiada de Node.js en el sitio web oficial [Node.js](https://nodejs.org/). La configuración del entorno de node.js es relativamente compleja.

2) instalar mysql
3) Instalar dependencias: ejecute `npm install` en el directorio raíz del proyecto, lo queEl archivo `package.json` instala todas las dependencias necesarias para el proyecto.

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

2. Crea un proyecto de Vue

1. Cree un proyecto usando Vue CLI

1) Instale y cree el proyecto vue: cree una nueva carpeta para colocar el archivo del proyecto - cmd en el directorio de archivos - `vue create my-project`
2) Estructura del directorio del proyecto: el directorio `src` contiene subdirectorios como `componentes` y `vistas`, que se utilizan para almacenar componentes y páginas.

3 en<template>Escribir datos en script
- **Definir datos**: en el componente Vue` <script>`部分定义数据,通过`data`函数返回数据对象。
- **Mostrar datos**: en el componente Vue`<template> `Uso parcial de expresiones de interpolación`{{ }}` o comando `v-bind`, etc. para mostrar datos.

Ejemplo: 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. Instale y use vue-router

Aquí se muestra la prueba de ruta del proyecto.

1. Instale el enrutador vue


1) Instalación: cmd en el directorio de archivos del proyecto donde desea agregar esto: `npm install vue-router`
2) Configurar el enrutamiento: configure las reglas de enrutamiento en `src/router/index.js` para asignar diferentes rutas a diferentes componentes.

Ejemplo:

Código en el archivo 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) uso<router-link>y<router-view>
<router-link>: Se utiliza para crear enlaces de navegación, que se pueden cambiar a la página de ruta correspondiente después de hacer clic.
<router-view>: Se utiliza para mostrar los componentes de enrutamiento coincidentes.

Ejemplo: aplicación.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>

Visualización de página: (preste atención al número de puerto)

Haga clic en la barra: Entonces, ¿por qué mi número de puerto se llama '/bar'?

Porque recuerda dónde está configurado el enrutador, cuál es la ruta. El nombre aquí se puede elegir de manera informal, pero generalmente es consistente con el nombre del componente, y el nombre del componente no se puede cambiar, y el nombre correspondiente es componente-xx.vue. .

¿Por qué hacer clic para saltar? Por eso<router-link> ,y<router-view> La función específica de la página se analizará más adelante.

4. Construya el primer subprograma de elemento más

1. Utilice el enrutador+elemento-plus anterior

element-plus puede entenderse como una serie de paquetes empaquetados para la representación de la página de inicio (el paquete universal puede entenderse de esta manera, los programadores no son programadores, solo somos portadores de paquetes)

2. Cómo utilizar el código de su componente

Haga clic en el sitio web oficialDescripción general de los componentes Element Plus (element-plus.org)

 

3.Instalar elemento plus


1) Instalación: cmd—`npm install element-plus` en el archivo del proyecto que desea utilizar.
2) Introducir element-plus: Introducir Element Plus y archivos de estilo en `main.js`

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


3) Utilice componentes: utilice componentes UI de Element Plus en componentes Vue, como `<el-button> `,`<el-input> "Espera.

Ejemplo: App.vue, de todos modos, con<el->El comienzo es

  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) Explica aquí<router-view> efecto:

Verá dónde quedó '3' en la imagen de arriba después de que ajusté su posición. Entendido como marcador de posición.

  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. Aquí también se implementa el salto de página, ¿cómo?


1) Configuración de enrutamiento: configure el enrutamiento en `src/router/index.js`, cada ruta corresponde a un componente.

Ejemplo: Por cierto, si la ruta es '/', significa que la primera página que entra es esta.

No parece decir cómo ejecutar el proyecto: cmd-npm run server en el directorio de archivos del proyecto

  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) Enlaces de navegación: utilice `<router-link> `Cree un enlace de navegación, haga clic en él para saltar a la página correspondiente, use`<router-view> `Mostrar componentes de enrutamiento.

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

5. Uso combinado de Vue-router, element-plus y axios

1. Instalar axios

1) Igual que arriba, comando de instalación: `npm install axios`
2) Configurar axios: configure la instancia de axios en `main.js`, establezca la URL base predeterminada y otras configuraciones globales.

2. Implementar miniprogramas de front-end y back-end


- **Interfaz de definición**: define la interfaz API en el lado del servidor, procesa la solicitud de front-end y devuelve datos.
- **Datos de solicitud de front-end**: utilice axios en el componente de front-end para enviar una solicitud, obtener datos y mostrarlos en la página.
- **Conmutación dinámica de datos**: combine los componentes de Element Plus y Vue Router para realizar una conmutación dinámica de datos del menú, como mostrar contenido diferente según los diferentes elementos del menú.

Pasos específicos:
1) Cree una instancia de axios y configure:

  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) Utilice axios en el componente Vue para enviar la solicitud:
  

  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) Combine Element Plus y Vue Router para implementar un menú dinámico: como se explicó anteriormente.

3.¿Qué hace axios?

Axios es un cliente HTTP basado en Promise para solicitudes HTTP en navegadores y entornos Node.js. Le permite enviar solicitudes asincrónicas de manera más conveniente y procesar datos de respuesta. En un proyecto Vue.js, puede utilizar Axios para comunicarse con la API de back-end, como obtener datos, enviar datos de formulario, procesar cargas de archivos y otras operaciones. axios proporciona una API simple que admite interceptores de solicitudes y respuestas, cancelación de solicitudes, configuración global y otras funciones, lo que hace que la interacción de datos entre el front-end y el back-end sea más eficiente y controlable.

1) Primero agregue un src/server/index.js basado en el proyecto anterior de la siguiente manera

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

Descripción de este código:

Este fragmento de código utiliza Node.js y el marco Express para crear un servidor simple. Aquí hay una explicación línea por línea del código:

1. **Importe el módulo Express y cree una instancia de aplicación**:
``javascript
const express = require('express');
constante aplicación = express();
   ```

- `express` es un marco para crear aplicaciones web. Aquí se importa mediante `require('express')` y se crea una instancia de aplicación mediante `express()`.

2. **Configure el puerto de escucha del servidor**:
``javascript
const port = 3000; // Puedes elegir cualquier puerto desocupado
   ```

- La variable `port` define el número de puerto en el que escucha el servidor, aquí se establece en `3000`.

3. **Configuraciones de middleware que permiten solicitudes entre dominios**:
``javascript
aplicación.use((req, res, siguiente) =&gt; {
res.header("Control-de-Acceso-Permitir-Origen", "*");
res.header("Control-de-Acceso-Permitir-Encabezados", "Origen, X-Solicitado-Con, Tipo-De-Contenido, Aceptar");
próximo();
   });  
   ```

- Este código configura un middleware para permitir solicitudes de origen cruzado (CORS). Permite solicitudes de cualquier origen y permite ciertos campos de encabezado. La función `next()` garantiza que la solicitud continúe hasta el siguiente middleware o controlador de ruta.

4. **Definir rutas y respuestas**:
``javascript
aplicación.get('/', (req, res) =&gt; {
//Crea un objeto que contenga los datos que deseas devolver
datos constantes = [
{ id: 1, nombre: 'Alice', edad:18, correo electrónico: '[email protected]' },
{ id: 2, nombre: 'Bob', edad:19, correo electrónico: '[email protected]' },
// ...más usuarios
     ];  
     
// Usa el método res.json() para enviar la respuesta JSON
res.json(datos);
   });  
   ```

- `app.get('/', ...)` define una ruta para solicitudes GET Cuando el cliente accede a la ruta raíz `/`, se llamará a esta función de controlador.
- La función del controlador crea un objeto `datos` que contiene los datos del usuario y lo devuelve al cliente como una respuesta JSON usando `res.json(data)`.

5. **Inicie el servidor**:
``javascript
aplicación.listen(puerto, () =&gt; {
console.log(`El servidor se está ejecutando en http://localhost:${port}`);
   });  
   ```

- `app.listen(port, ...)` inicia el servidor y le permite escuchar en el puerto definido.
- Cuando el servidor se inicia correctamente, se envía un mensaje a la consola indicando que el servidor se está ejecutando y se puede acceder a él a través de `http://localhost:3000`.

Resumen: este fragmento de código crea un servidor Express simple que responde a solicitudes GET a la ruta raíz `/` y devuelve una respuesta JSON que contiene los datos del usuario. También se configura un middleware para permitir solicitudes entre dominios. Al ejecutar este servidor en el puerto `3000`, puede usar un navegador u otro cliente HTTP para acceder a `http://localhost:3000` y ver los datos JSON devueltos.

2) correr

cmd: nodo index.js en el directorio de archivos del servidor

Puede ver datos de fondo

Luego ejecute cmd-npm run save en el directorio de archivos del proyecto y podrá ver que hay datos. !

¿Cómo administro los datos de backend?

Justo en el archivo server/index.js recién agregado:

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

Sobre la base de seis y cinco, más el backend.

La forma de ejecutar los cinco proyectos junto con el backend del primer proyecto MoreMall es combinar el front-end y el backend.

1. Prepara dos cosas

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

Póngalo debajo del archivo scr, pero también puede ser paralelo. Lo dejé ir antes y no lo eliminé. De todos modos, npm run server también es posible en diferentes directorios de archivos.

Dos archivos en el servidor:

(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

ilustrar:

El propósito de este código es usar Node.js y el módulo `mysql` para crear un grupo de conexiones a una base de datos MySQL y exportarlo para usarlo en otros módulos.

La explicación específica es la siguiente:

1. **Importar módulo `mysql`**:
``javascript
deje que mysql = require('mysql');
   ```
Esta línea de código importa el módulo `mysql`, que es una biblioteca Node.js utilizada para conectarse y operar bases de datos MySQL.

2. **Crea un grupo de conexiones**:
``javascript
deje db = mysql.createPool({
anfitrión: '127.0.0.1',
usuario: 'root',
puerto: '3306',
contraseña: 'root',
base de datos: 'prueba'
   });
   ```
Este código crea un grupo de conexiones utilizando el método `mysql.createPool`. Un grupo de conexiones es un conjunto de conexiones de bases de datos que varios clientes pueden compartir y reutilizar. La creación de un grupo de conexiones puede mejorar el rendimiento porque evita restablecer la conexión de la base de datos con cada solicitud.

- `host: '127.0.0.1'`: La dirección de host del servidor de la base de datos. Este es el servidor local.
- `usuario: 'root'`: nombre de usuario de la base de datos.
- `puerto: '3306'`: número de puerto de la base de datos. El puerto predeterminado para MySQL es 3306.
- `contraseña: 'root'`: contraseña de la base de datos.
- `base de datos: 'prueba'`: El nombre de la base de datos a conectar.

3. **Exportar grupo de conexiones**:
``javascript
módulo.exportaciones = db;
   ```
Esta línea de código exporta el objeto del grupo de conexiones `db` para que otros módulos puedan importar y usar este grupo de conexiones a través del método `require`.

Usando este grupo de conexiones, puede introducirlo en otros módulos y usarlo para realizar consultas a la base de datos. Por ejemplo:

``javascript
//Introducir el grupo de conexiones de la base de datos
const db = require('./ruta/a/este/módulo');

//Ejecutar consulta a la base de datos
db.query('SELECT * FROM usuario', (err, resultados) =&gt; {
si (err) {
console.error('Error al ejecutar la consulta:', err);
devolver;
    }
console.log('Resultados de la consulta:', resultados);
});
```

Este método facilita la administración y el uso de conexiones de bases de datos, especialmente en aplicaciones que requieren acceso frecuente a la base de datos.

(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. Complementar los conocimientos de los principiantes

Si no lo entiendes, lee más:/

  • Terminal de servicio

    • Cree un servidor Express y configure un grupo de conexiones de base de datos.
    • Configure middleware que permita solicitudes entre dominios.
    • Defina una ruta GET para consultar la base de datos y devolver datos.
  • cliente

    • Utilice Axios para enviar solicitudes HTTP al servidor en el componente Vue.
    • Obtenga los datos y muéstrelos en la página.

"Al usar este grupo de conexiones, puede introducirlo en otros módulos y usarlo para realizar consultas a la base de datos". - ¿Cuáles son los otros módulos?

Es el código del lado del servidor en el servidor.

En este contexto, "otros módulos" generalmente se refiere a otros archivos JavaScript en su proyecto Node.js, no dentro del archivo `.vue` del componente Vue. Específicamente, estos otros módulos suelen ser código del lado del servidor que maneja solicitudes HTTP e interacciones de bases de datos.

Una estructura de proyecto típica podría verse así:

```
proyecto/
├── servidor/
│ ├── db.js // El código del grupo de conexiones de la base de datos que proporcionaste
│ ├── route.js // Módulo que define el enrutamiento API
│ └── server.js // El archivo que inicia el servidor, al que le correspondo aquí es
└── cliente/
├── fuente/
│ ├── componentes/
│ │ ├── YourComponent.vue // Tu componente Vue
│ ├── main.js // Archivo de entrada del proyecto Vue
│ └── ... // Otros archivos front-end
└── paquete.json
```

En esta estructura, la carpeta `server/` contiene el código del lado del servidor, mientras que la carpeta `client/` contiene el código de Vue del front-end.

### Ejemplo: uso del grupo de conexiones de base de datos en el lado del servidor

Suponiendo que ya tiene un archivo `server/db.js` que define un grupo de conexiones de base de datos, puede introducirlo y usarlo en el archivo `server/routes.js`:

``javascript
//servidor/rutas.js
const express = require('express');
const db = require('./db'); //Introducir el grupo de conexiones de la base de datos

const router = express.Router();// No tengo uso para esta sección de routers.js. Las otras partes están juntas en index.js, y juntas nos damos cuenta de "introducir una configuración de dominio cruzado de configuración de grupo de conexión de base de datos". según necesidades" ¿Acceso? -Establecer enrutamiento-(propósito final) iniciar servidor"

//Definir una ruta de ejemplo
enrutador.get('/usuarios', (req, res) =&gt; {
db.query('SELECT * FROM usuario', (err, resultados) =&gt; {
si (err) {
devolver res.status(500).json({ error: err.message });
        }
res.json(resultados);
    });
});

módulo.exports = enrutador;
```

Luego, configure e inicie el servidor Express en el archivo `server/server.js` y use las rutas definidas:

``javascript
// servidor/servidor.js
const express = require('express');
constante aplicación = express();
const rutas = require('./routes'); //Introduce rutas definidas

app.use('/api', rutas); // Usar enrutamiento

constante puerto = 3000;
aplicación.listen(puerto, () =&gt; {
console.log(`El servidor se está ejecutando en http://localhost:${port}`);
});
```

### Uso de API en componentes de Vue

En su componente Vue, puede usar Axios para enviar solicitudes HTTP a la API definida anteriormente:

``vista
<template>
  <div>
<h2>Usuarios</h2>
    <ul>
      <li v-for="user in users" :key="user.id">
        {{ nombre de usuario }} - {{ usuario.email }}
      </li>
    </ul>
  </div>
</template>

<script>
importar axios desde 'axios';

exportar por defecto {
datos() {
devolver {
usuarios: []
    };
  },
montado() {
axios.get('http://localhost:3000/api/usuarios')
.then(respuesta =&gt; {
esto.usuarios = respuesta.datos;
      })
.catch(error =&gt; {
console.error('Error al obtener usuarios:', error);
      });
  }
};
</script>
```

De esta manera, al separar la lógica de front-end y back-end, puede organizar y administrar mejor el código, al tiempo que garantiza que el lado del servidor maneje las interacciones de la base de datos, mientras que el front-end maneja la adquisición y visualización de datos a través de la API.

3.

1) ¡El servidor debe estar escuchando! ! Solo durante el monitoreo se puede ejecutar el proyecto y ver los datos de fondo. Sólo los siguientes pasos:

Project/src/sserver/——cmd——comando node index.js, comience a ver

El seguimiento correcto muestra:

En segundo lugar, descubrí que podía utilizarhttp://localhost:3000/api/usuariosVeo los datos JSON correctos, pero no puedo usar http://localhost:3000. La solución es la siguiente:

Modificar opciónOne.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. Cómo agregar una página de inicio de sesión

Primero, agregue a la carpeta de activos: img es la imagen de la página en la que inició sesión al principio y la carpeta css

Luego agregue Login.vue, el enrutador de inicio de sesión.

El último paso es ajustar la página anterior, separar App.vue (total), encapsularlo, dibujar un marco en el lado izquierdo de la página para crear un Bar.vue separado y luego, si desea ver esta barra en cada página, debe agregarla a cada página. Agregue una referencia a Bar.vue en el archivo .vue.

Ejemplo:

opciónDos.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>

opciónOne.vue:

  • A pesar de<script>里面import了Bar,但是模块中也要用<Bar />
  • Comente import axios porque esta oración tiene el mismo efecto que esta.$http.get('/optionone').then(response =&gt;.
  • Si desea que los datos de la base de datos se muestren correctamente después de los nombres de las columnas, debe establecer el ancho al configurar los parámetros para los dos primeros nombres de las columnas y no establecer el ancho para el último nombre de la columna.
  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>

Por supuesto, puedo responder estas preguntas por ti:

### 1. Comprenda la función de cada archivo y cómo funcionan juntos

**db.js (archivo de configuración de base de datos backend)**
- Función: Crear y exportar un grupo de conexiones de base de datos MySQL.
- Cómo trabajan juntos: utilizado por index.js para realizar operaciones de bases de datos.

**index.js (archivo principal del servidor backend)**
- Rol: configurar el servidor Express, configurar el enrutamiento y el middleware y manejar las solicitudes de API.
- Cómo trabajar juntos: use db.js para conectarse a la base de datos y responder a las solicitudes desde el front-end.

**main.js (archivo principal de interfaz)**
- Función: crear una aplicación Vue, configurar Vue Router y axios, y montar la aplicación.
- Cómo funciona en conjunto: use Element Plus y Vue Router para mejorar la interfaz de usuario y la navegación, con axios utilizados para comunicarse con el backend.

**index.js (archivo de configuración del enrutador Vue)**
- Función: definir el enrutamiento front-end y especificar los componentes de Vue correspondientes a diferentes rutas.
- Cómo trabajar juntos: integre con la instancia de Vue en main.js para implementar el enrutamiento de páginas.

### 2. Demuestre cómo iniciar los servidores backend y frontend

**Inicie el servidor backend**:
- Ejecute `node index.js` para iniciar el servidor Express.
- Asegúrese de que el servicio MySQL esté ejecutándose.

**Inicie el servidor front-end**:
- Si usa Vue CLI, ejecute `npm runserve` para iniciar el servidor de desarrollo recargado en caliente.
- Acceda a la dirección especificada en el navegador (generalmente localhost y un puerto determinado) para ver la aplicación front-end.

### 3. Mostrar la página de inicio y el proceso de interacción del usuario.

- Cuando el usuario abre la aplicación, Vue Router representará el componente correspondiente según la URL.
- El usuario realiza una operación (como completar un formulario de inicio de sesión) y los datos se envían al backend a través del formulario.
- El usuario ve el resultado de la respuesta (inicio de sesión exitoso o fallido) y navega a diferentes páginas según el resultado.

### 4. Explique el proceso de solicitud y respuesta de API.

- El front-end utiliza axios para enviar solicitudes HTTP al back-end.
- El servidor backend Express recibe la solicitud y realiza operaciones de base de datos.
- El backend envía los resultados de la consulta de la base de datos o la información de error al frontend como respuesta.
- La interfaz recibe la respuesta y actualiza el estado de la página o muestra información basada en la respuesta.

### 5. Discuta las tecnologías clave utilizadas en el proyecto.

- **Vue Router**: gestiona el enrutamiento front-end e implementa la navegación de páginas en aplicaciones de una sola página.
- **axios**: se utiliza para enviar solicitudes HTTP y procesar respuestas desde el front-end hasta el back-end.
- **Express**: marco de aplicación web Node.js, utilizado para crear servidores back-end y manejar solicitudes API.
- **MySQL**: Sistema de gestión de bases de datos relacionales, utilizado para almacenar y consultar datos.

### 6. Prepare respuestas a algunas preguntas frecuentes

**¿Cómo lidiar con CORS? **
- Utilice cors middleware para permitir que dominios externos específicos accedan a la API.

**¿Cómo implementar la autenticación de usuario? **
- La API de backend puede verificar la información de autenticación (como tokens JWT) en la solicitud para verificar la identidad del usuario.

**¿Cómo garantizar la seguridad de los datos? **
- Transfiera datos cifrados mediante HTTPS.
- Las contraseñas de los usuarios se codifican y almacenan.
- Validar todas las entradas del usuario para evitar ataques como la inyección SQL.

A través de las respuestas anteriores, debería poder tener una comprensión clara del principio de funcionamiento y el proceso de implementación del proyecto, y estar preparado para la defensa.