首页 > 其他分享 >前后端联动的小例子

前后端联动的小例子

时间:2024-11-06 08:48:00浏览次数:1  
标签:req const 前后 js 例子 limit 联动 query page

当然可以。下面我将为你构建一个简单的前后端联调场景,该场景涉及从后端获取表格数据并在前端显示这些数据。为了简化示例,我将使用Node.js(Express框架)作为后端服务,Vue.js作为前端框架。

后端(Node.js + Express)

首先,确保已经安装了必要的Node.js模块。如果还没有安装,可以通过运行以下命令来安装:

npm install express body-parser cors

然后,创建一个简单的Express服务器,用于提供数据列表的API接口。

server.js (后端代码)

const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');

const app = express();
app.use(bodyParser.json());
app.use(cors());

// 模拟的数据列表
const mockData = [
  { id: 1, name: '张三', age: 24, address: '北京市' },
  { id: 2, name: '李四', age: 25, address: '上海市' },
  { id: 3, name: '王五', age: 26, address: '广州市' }
];

// API接口 - 获取数据列表
app.get('/vue-admin-template/table/list', (req, res) => {
  const { page = 1, limit = 10 } = req.query;
  const start = (page - 1) * limit;
  const end = start + limit;
  const paginatedData = mockData.slice(start, end);

  res.json({
    code: 20000,
    data: {
      items: paginatedData,
      total: mockData.length
    }
  });
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

前端(Vue.js)

假设你已经有了一个Vue.js项目,接下来我们将在项目中添加代码以请求上述后端API并展示数据。

src/utils/request/request.js (前端请求工具)

import axios from 'axios';

const request = axios.create({
  baseURL: 'http://localhost:3000', // 根据实际情况修改基础URL
  timeout: 5000
});

export default request;

src/api/table.js (前端API接口文件)

import request from '@/utils/request/request';

export function getList(params) {
  return request({
    url: '/vue-admin-template/table/list',
    method: 'get',
    params
  });
}

src/components/TableList.vue (前端组件)

<template>
  <div>
    <h1>用户列表</h1>
    <table>
      <thead>
        <tr>
          <th>ID</th>
          <th>姓名</th>
          <th>年龄</th>
          <th>地址</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="item in tableData" :key="item.id">
          <td>{{ item.id }}</td>
          <td>{{ item.name }}</td>
          <td>{{ item.age }}</td>
          <td>{{ item.address }}</td>
        </tr>
      </tbody>
    </table>
    <p>总记录数:{{ total }}</p>
  </div>
</template>

<script>
import { getList } from '@/api/table';

export default {
  data() {
    return {
      tableData: [],
      total: 0
    };
  },
  created() {
    this.fetchData();
  },
  methods: {
    fetchData() {
      getList({ page: 1, limit: 10 }).then(response => {
        this.tableData = response.data.items;
        this.total = response.data.total;
      }).catch(error => {
        console.error('Error:', error);
      });
    }
  }
};
</script>

运行应用

  1. 启动后端服务器:在命令行中运行 node server.js 启动Node.js服务器。
  2. 启动前端开发服务器:确保你的Vue.js项目已安装了所有依赖,并通过运行 npm run serve 或类似的命令启动开发服务器。

这样,当你访问前端应用时,应该能看到从后端获取到的用户列表信息。这只是一个基本的例子,实际项目可能需要更复杂的错误处理、状态管理等。

当然,我会详细分析这段后端代码。这段代码是用Node.js和Express框架编写的,用于提供一个简单的RESTful API,以便前端应用可以从中获取数据列表。以下是代码的详细解释:

导入必要的模块

const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
  • express: 是一个流行的Node.js框架,用于快速构建Web应用程序。
  • body-parser: 是一个中间件,用于解析HTTP请求体中的数据,通常用于处理POST请求中的JSON数据。
  • cors: 是一个中间件,用于处理跨域资源共享(CORS)问题,允许前端应用从不同的域名访问后端API。

创建Express应用实例

const app = express();
  • 创建一个Express应用实例,用于定义路由和中间件。

使用中间件

app.use(bodyParser.json());
app.use(cors());
  • bodyParser.json(): 解析请求体为JSON格式。
  • cors(): 允许跨域请求,默认情况下允许所有来源的请求。

模拟数据列表

const mockData = [
  { id: 1, name: '张三', age: 24, address: '北京市' },
  { id: 2, name: '李四', age: 25, address: '上海市' },
  { id: 3, name: '王五', age: 26, address: '广州市' }
];
  • 定义了一个模拟数据列表 mockData,包含一些示例数据。这些数据将用于响应前端的请求。

定义API路由

app.get('/vue-admin-template/table/list', (req, res) => {
  const { page = 1, limit = 10 } = req.query;
  const start = (page - 1) * limit;
  const end = start + limit;
  const paginatedData = mockData.slice(start, end);

  res.json({
    code: 20000,
    data: {
      items: paginatedData,
      total: mockData.length
    }
  });
});
  • 路由路径: /vue-admin-template/table/list
  • 请求方法: GET
  • 请求参数:
    • page: 当前页码,默认值为1。
    • limit: 每页显示的条目数,默认值为10。
  • 逻辑:
    • 计算分页的起始索引 start 和结束索引 end
    • 使用 slice 方法从 mockData 中提取当前页的数据 paginatedData
  • 响应:
    • 返回一个JSON对象,包含:
      • code: 状态码,20000表示成功。
      • data: 包含分页后的数据 items 和总记录数 total

启动服务器

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});
  • 端口号: 使用环境变量 process.env.PORT 设置的端口号,如果没有设置则默认为3000。
  • 监听端口: 使用 app.listen 方法启动服务器,监听指定的端口。
  • 回调函数: 服务器启动成功后,打印一条消息到控制台,指示服务器正在运行的端口号。

总结

这段代码实现了一个简单的Express服务器,提供了一个分页查询数据的API接口。前端应用可以通过发送GET请求到 /vue-admin-template/table/list 来获取分页后的数据列表。通过调整 pagelimit 参数,可以灵活地获取不同页的数据。

好的,让我详细解释一下这一行代码:

const { page = 1, limit = 10 } = req.query;

解构赋值与默认值

这行代码使用了JavaScript的解构赋值语法,并且为了解构出来的变量提供了默认值。让我们逐步解析:

  1. 解构赋值

    • req.query 是一个对象,包含了客户端请求中URL查询字符串的所有键值对。
    • 例如,如果客户端请求的URL是 /vue-admin-template/table/list?page=2&limit=15,那么 req.query 将是一个对象 { page: '2', limit: '15' }
  2. 解构赋值语法

    • const { page, limit } = req.query; 这部分代码的意思是从 req.query 对象中提取出 pagelimit 属性,并将它们分别赋值给同名的变量 pagelimit
  3. 默认值

    • page = 1limit = 10 是为了解决某些情况下 pagelimit 可能未被传递或为空的问题。
    • 如果 req.query 中没有 page 属性,或者 page 的值是 undefined,那么 page 变量将被赋值为 1
    • 同样,如果 req.query 中没有 limit 属性,或者 limit 的值是 undefined,那么 limit 变量将被赋值为 10

示例

假设客户端发送了以下几种请求:

  1. 请求1/vue-admin-template/table/list?page=2&limit=15

    • req.query{ page: '2', limit: '15' }
    • 解构赋值后,page'2'limit'15'
  2. 请求2/vue-admin-template/table/list?page=2

    • req.query{ page: '2' }
    • 解构赋值后,page'2'limit10(因为 limit 没有传递,所以使用默认值 10
  3. 请求3/vue-admin-template/table/list

    • req.query{}(空对象)
    • 解构赋值后,page1limit10(因为 pagelimit 都没有传递,所以都使用默认值)

代码解释

const { page = 1, limit = 10 } = req.query;
  • req.query 对象中提取 pagelimit 属性。
  • 如果 page 不存在或为 undefined,则将其赋值为 1
  • 如果 limit 不存在或为 undefined,则将其赋值为 10

应用场景

在实际应用中,这种写法非常常见,特别是在处理分页查询时。它确保了即使客户端没有传递某些参数,程序也能正常运行并返回合理的默认值。这样可以提高代码的健壮性和用户体验。

标签:req,const,前后,js,例子,limit,联动,query,page
From: https://www.cnblogs.com/lmzzr24/p/18529203

相关文章

  • Vue+Springboot 前后端分离项目如何部署?
    本文转载自:https://fangcaicoding.cn/course/11/58大家好!我是方才,目前是8人后端研发团队的负责人,拥有6年后端经验&3年团队管理经验,截止目前面试过近200位候选人,主导过单表上10亿、累计上100亿数据量级的业务系统的架构和核心编码。“学编程,一定要系统化”是我一直坚持......
  • 软件架构中对前后端分离的学习
    前后端分离架构目录前后端分离架构前端后端前端MVVM架构MVVM(Model-View-ViewModel)架构模式是一种广泛应用于软件开发中的设计模式,特别是在现代前端开发和移动应用开发中。它旨在通过将应用程序分为三个核心部分——模型(Model)、视图(View)和视图模型(ViewModel)——来简化用户界面......
  • loki: python3访问loki接口的例子
    一,代码:importrequests#loki的地址loki_url="http://127.0.0.1:3100/loki/api/v1/query_range"#请求参数query_params={"query":"{job=\"devlogs\"}|=`dev.ERROR`","start":"2024-11-04T00:00:00Z......
  • spring-framework的StopWatch类详解,每个方法带有具体的例子
    目录简介:StopWatch类的应用场景:StopWatch类提供了以下一些主要方法:start():stop():reset():split():unsplit():getTime():getStartTime():toString():isStarted():isStopped():示例代码:以下是一个使用StopWatch测量代码执行时间的简单示例:以下是一个使用StopWatch类的复杂示例,该示例演......
  • 使用cmake构建一个动态库的例子
    接触cmake很多年了,但是从来没自己写一个完整的CMakeLists.txt构建过自己的动态库,因为工作以来动态库我都是用别人开源的,基本没有构建自己动态库的需求。今天需要将一个使用automake构建的老库替换为cmake来构建于是了解了一些相关细节,准备迁移过来。极简例子以C语言为例,一个动态......
  • Windows Server2022服务器部署RuoYi若依前后端分离
    部署准备虚拟机WindowsServer2022若依前后端分离v3.8.8打包好jdk1.8redis5mysql8.4iis服务路由插件重写插件1.安装jdk1.8https://www.azul.com/downloads/#downloads-table-zulu略2.安装启动redis5https://github.com/tporadowski/redis/releases下载安装默认配置......
  • java基于springboot的项目评审系统(源码+vue+部署文档+前后端分离等)
    收藏关注不迷路!!......
  • 前后端分离项目上云
    我不知道怎么描述这种心情!当你自己做过的项目,你随时随地都可以访问到,并且还可以作为简历和答辩时随时展示!这种就很爽!!!接下来我就基于阿里云服务器来操作一下前后端项目如何上云!!!我这里使用的是vue+springboot,vue使用的是vite项目,springboot使用的是maven项目。如......
  • 一个简单的 ASP.NET Core 依赖注入例子,提高代码的可维护性和可扩展性
    前言:什么是依赖注入依赖注入可以提高代码的可维护性、可测试性、可替换性和可扩展性,降低组件之间的耦合度,使得代码更加清晰和灵活,ASP.NETCore提供了内置的依赖注入容器,可以帮助我们轻松地将服务注册到容器中。本文主要通过一个简单的例子来阐述ASP.NETCore依赖注入的使用......
  • 【开源视频联动物联网平台】GB/T28181和SIP的区别
    【开源视频联动物联网平台】GB/T28181和SIP的区别-阿里云开发者社区在一些涉及系统融合的项目中,经常会有人把GB/T28181和SIP混淆,特别是在项目实施与配置的时候,视频监控联网的许多参数都被写成SIP,这让现场工程师感到困扰。 GB/T28181是专门针对视频监控联网的国家标准,为了满足......