前端用json-server来Mock后端返回的数据处理

<html>
    <body>
        <div class="login-container">
            <h2>登录</h2>
            <div class="login-form">
                <div class="form-group">
                    <input type="text" id="username" placeholder="请输入用户名" />
                </div>
                <div class="form-group">
                    <input type="password" id="password" placeholder="请输入密码" />
                </div>
                <button class="login-btn" onclick="handleLogin()">登录</button>
                <div class="form-links">
                    <a href="#">忘记密码?</a>
                    <a href="#">注册账号</a>
                </div>
                <script>
                    function handleLogin() {
                        const username = document.getElementById('username').value;
                        const password = document.getElementById('password').value;
                        
                        // 这里可以添加用户名和密码的验证逻辑
                        if(username && password) {
                            // 发送登录请求到本地模拟的API
                            fetch('http://localhost:3000/users')
                                .then(response => response.json())
                                .then(data => {
                                    const user = data.find(u => u.username === username && u.password === password);
                                    if(user) {
                                        // 登录成功,跳转到后台管理页面
                                        localStorage.setItem('token', user.token);  // 模拟保存token
                                        window.location.href = 'dashboard.html';  // 跳转到同级的后台管理页面
                                    } else {
                                        alert('用户名或密码错误');
                                    }
                                })
                                .catch(error => {
                                    alert('登录失败,请稍后重试');
                                });
                        } else {
                            alert('请输入用户名和密码');
                        }
                    }
                </script>
            </div>
        </div>
        <div class="beian-container">
            <a href="https://beian.miit.gov.cn/" target="_blank">备案号: 粤B2-20090059-1623A</a>
        </div>
        <style>
            body {
                margin: 0;
                min-height: 100vh;
                display: flex;
                align-items: center;
                justify-content: center;
                background-color: #f5f5f5;
                position: relative;
            }
            
            .login-container {
                width: 100%;
                max-width: 400px;
                padding: 20px;
                box-shadow: 0 0 10px rgba(0,0,0,0.1);
                border-radius: 5px;
                background-color: white;
            }
            
            .login-container h2 {
                text-align: center;
                color: #333;
                margin-bottom: 30px;
            }
            
            .form-group {
                margin-bottom: 20px;
            }
            
            .form-group input {
                width: 100%;
                padding: 10px;
                border: 1px solid #ddd;
                border-radius: 4px;
                font-size: 14px;
                box-sizing: border-box;
            }
            
            .login-btn {
                width: 100%;
                padding: 12px;
                background-color: #1890ff;
                color: white;
                border: none;
                border-radius: 4px;
                cursor: pointer;
                font-size: 16px;
            }
            
            .login-btn:hover {
                background-color: #40a9ff;
            }
            
            .form-links {
                margin-top: 15px;
                text-align: center;
            }
            
            .form-links a {
                color: #1890ff;
                text-decoration: none;
                margin: 0 10px;
                font-size: 14px;
            }
            
            .form-links a:hover {
                text-decoration: underline;
            }

            .beian-container {
                position: fixed;
                bottom: 20px;
                left: 0;
                right: 0;
                text-align: center;
            }
            
            .beian-container a {
                color: #666;
                text-decoration: none;
                font-size: 20px;
            }
            
            .beian-container a:hover {
                color: #1890ff;
            }
        </style>
    </body>
</html>

为了基于上述代码模拟登录,并让本地访问后台管理页面,你可以通过以下步骤来实现:

  1. 确保后端接口存在:你需要确保本地有一个接口(例如 /api/login)来模拟登录请求的处理。因为你的代码中使用的是 fetch 来发送请求到该接口,后端会返回模拟数据。

  2. 使用前端本地模拟 API:如果没有真正的后端,你可以使用 JavaScript 来模拟登录 API。你可以将登录接口本地化,只是直接返回你希望的 mock 数据。

  3. 本地开发环境搭建

    • 你可以使用简单的 HTTP 服务器来提供本地服务(例如通过 node.jspython 搭建)。
    • 或者,你可以使用现有的工具(如 json-server)来创建一个 mock 的 RESTful API。

使用 json-server 来模拟后端

  1. 安装 json-server: 首先,你需要安装 json-server 来模拟后端 API。使用 npmyarn 安装:

npm install -g json-server

如果npm下载的有点慢的话,可以参考下面这篇文章,切换到淘宝镜像源去下载。

npm i 安装依赖卡慢,失败,等很久,不成功,错误等等_npm i 很慢-CSDN博客

        2. 创建一个模拟数据文件: 在你的项目目录下创建一个 db.json 文件,这个文件将用来模拟后端数据,例如:

{
    "users": [
        {
            "username": "user",
            "password": "123",
            "success": true,
            "token": "mock-jwt-token-123",
            "userId": "mock-user-001",
            "role": "user"
        }
    ]
}

3. 启动 json-server: 使用以下命令启动本地 API 服务器:

json-server --watch db.json --port 3000
  • 这样,你就启动了一个 RESTful API 服务器,模拟 /api/login 接口。

4. 修改前端代码: 你需要将 fetch 请求中的 URL 修改为本地模拟的 API 地址,例如:

fetch('http://localhost:3000/users')

或者根据用户名和密码进行匹配,具体实现可以在前端模拟,或者通过 json-serverroutes 配置来实现。

后台管理页面 (Dashboard)

你需要在 /dashboard.html 页面中,根据 localStorage 中保存的 token 来显示用户的后台管理页面内容。

<html>
    <body>
        <div class="dashboard-container">
            <h2>后台管理页面</h2>
            <p>欢迎,您已经成功登录!</p>
            <button onclick="logout()">退出登录</button>
        </div>
        
        <script>
            // 检查 localStorage 中是否有 token
            const token = localStorage.getItem('token');
            if (!token) {
                // 如果没有 token,则重定向到登录页面
                window.location.href = 'index.html';
            }

            function logout() {
                // 清除 localStorage 中的 token
                localStorage.removeItem('token');
                // 退出后重定向回登录页面
                window.location.href = 'index.html';
            }
        </script>

        <style>
            body {
                margin: 0;
                min-height: 100vh;
                display: flex;
                align-items: center;
                justify-content: center;
                background-color: #f5f5f5;
            }
            
            .dashboard-container {
                width: 100%;
                max-width: 600px;
                padding: 20px;
                box-shadow: 0 0 10px rgba(0,0,0,0.1);
                border-radius: 5px;
                background-color: white;
                text-align: center;
            }
            
            .dashboard-container h2 {
                margin-bottom: 20px;
            }
            
            .dashboard-container button {
                padding: 10px 20px;
                background-color: #1890ff;
                color: white;
                border: none;
                border-radius: 4px;
                cursor: pointer;
                font-size: 16px;
            }
            
            .dashboard-container button:hover {
                background-color: #40a9ff;
            }
        </style>
    </body>
</html>

代码解析:

  • 登录页面 (index.html):

    • 用户名和密码填写后,点击登录按钮触发 handleLogin 方法。
    • 方法会发送一个请求到本地模拟的 API (http://localhost:3000/users),通过匹配用户名和密码来判断是否登录成功。
    • 成功登录后,模拟将一个 JWT token 存储在 localStorage 中,并跳转到 dashboard.html 页面。
  • 后台管理页面 (dashboard.html):

    • 在页面加载时,会检查 localStorage 是否存在 token。如果没有,说明用户没有登录,页面会重定向回登录页面 (index.html)。
    • 如果 token 存在,则认为用户已登录,显示后台管理界面,并提供一个退出登录按钮,点击后清除 localStorage 中的 token 并重定向回登录页面。

通过这样的设置,你可以实现一个简单的前端模拟登录系统,并允许用户登录后访问后台管理页面。

运行之后,在登录页面输入user、123点击登录

即可进入到后台管理页面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/951124.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【xLua】xLua-master签名、加密Lua文件

GitHub - Tencent/xLua: xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc. 如果你想在项目工程上操作&#xff0c;又发现项目工程并没导入Tools&#xff0c;可以从xLua-master工程拷贝到项目工程Assets…

Unity学习笔记(六)使用状态机重构角色移动、跳跃、冲刺

前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 整体状态框架(简化) Player 是操作对象的类&#xff1a; 继承了 MonoBehaviour 用于定义游戏对象的行为&#xff0c;每个挂载在 Unity 游戏对象上的脚本都需要继承自 MonoBehaviour&#x…

AIDD-人工智能药物设计-AlphaFold系列:全面回顾AF1-3的关键研究成果及其对科学界的影响

AlphaFold系列&#xff1a;全面回顾AF1-3的关键研究成果及其对科学界的影响 本文章将围绕 AlphaFold 系列模型在蛋白质结构预测领域的前沿研究展开&#xff0c;重点介绍 AlphaFold1、AlphaFold2 与 AlphaFold3 的关键研究成果&#xff0c;以及它们对科学界和制药工业的深远影响…

Pandas-RFM会员价值度模型

文章目录 一. 会员价值度模型介绍二. RFM计算与显示1. 背景2. 技术点3. 数据4. 代码① 导入模块② 读取数据③ 数据预处理Ⅰ. 数据清洗, 即: 删除缺失值, 去掉异常值.Ⅱ. 查看清洗后的数据Ⅲ. 把前四年的数据, 拼接到一起 ④ 计算RFM的原始值⑤ 确定RFM划分区间⑥ RFM计算过程⑦…

Git 入门指南:如何高效管理你的代码库

文章目录 Git 的介绍安装 Git创建仓库Git 三板斧addcommitpush 冲突问题常用 Git 指令 Git 的介绍 Git 是一个分布式版本控制系统&#xff0c;用于跟踪文件的变化并支持团队协作开发。最初由 Linus Torvalds&#xff08;Linux 操作系统的创始人&#xff09;开发&#xff0c;Gi…

execl条件比较两个sheet每个单元格的值

1.把对比的sheet复制到对比文件中 2.选择首个单元格 3.新建规则 4.选择公式 5.编写公式 A3<>Sheet1!A36.选择差异颜色 7.选择应用范围 $1:$655368.选择应用范围

2025新年源码免费送

2025很开门很开门的源码免费传递。不需要馒头就能获取4套大开门源码。 听泉偷宝&#xff0c;又进来偷我源码啦&#x1f44a;&#x1f44a;&#x1f44a;。欢迎偷源码 &#x1f525;&#x1f525;&#x1f525; 获取免费源码以及更多源码&#xff0c;可以私信联系我 我们常常…

本地LLM部署--Open WebUI(多媒体工具FFMPEG作用)

OpenWebUI 和 FFmpeg 的关系主要体现在 多媒体处理需求 上。OpenWebUI 是一个基于 Web 的接口项目&#xff0c;提供与各种 AI 模型交互的功能&#xff0c;而 FFmpeg 则是一种多媒体处理工具&#xff0c;用于处理音视频数据。二者的关系主要体现为 依赖和功能互补&#xff0c;具…

使用双向链表优化数组操作的性能

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 背景 双向链表的优势 实现方案 性能优化 …

Inno Setup制作安装包,安装给win加环境变量

加 ; 加环境变量&#xff0c;开启&#xff0c;下面一行 ChangesEnvironmentyes 和 ; 加环境变量wbrj变量名&#xff0c;{app}\project\bin变量值&#xff0c;{app}\后接文件名&#xff0c;{app}表示安装路径。下面一行,{olddata};原来的值上拼接 Root: HKLM; Subkey: “SYSTEM\…

积分与签到设计

积分 在交互系统中&#xff0c;可以通过看视频、发评论、点赞、签到等操作获取积分&#xff0c;获取的积分又可以参与排行榜、兑换优惠券等&#xff0c;提高用户使用系统的积极性&#xff0c;实现引流。这些功能在很多项目中都很常见&#xff0c;关于功能的实现我的思路如下。 …

Taro+Vue实现图片裁剪组件

cropper-image-taro-vue3 组件库 介绍 cropper-image-taro-vue3 是一个基于 Vue 3 和 Taro 开发的裁剪工具组件&#xff0c;支持图片裁剪、裁剪框拖动、缩放和输出裁剪后的图片。该组件适用于 Vue 3 和 Taro 环境&#xff0c;可以在网页、小程序等平台中使用。 源码 https:…

AI赋能服装零售:商品计划智能化,化危机为转机

在服装零售这片竞争激烈的战场上&#xff0c;每一个细微的决策都可能成为品牌兴衰的关键。当市场波动、消费者口味变化、供应链挑战接踵而至时&#xff0c;许多品牌往往将危机归咎于外部环境。然而&#xff0c;真相往往更为深刻——“危机不是外部的&#xff0c;而是你的商品计…

Flutter:吸顶效果

在分页中&#xff0c;实现tab吸顶。 TDNavBar的screenAdaptation: true, 开启屏幕适配。 该属性已自动对不同手机状态栏高度进行适配。我们只需关注如何实现吸顶。 view import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import p…

企业级PHP异步RabbitMQ协程版客户端 2.0 正式发布

概述 workerman/rabbitmq 是一个异步RabbitMQ客户端&#xff0c;使用AMQP协议。 RabbitMQ是一个基于AMQP&#xff08;高级消息队列协议&#xff09;实现的开源消息组件&#xff0c;它主要用于在分布式系统中存储和转发消息。RabbitMQ由高性能、高可用以及高扩展性出名的Erlan…

信号弱开启手机Wifi通话,MIUI显示/隐藏5G开关的方法

1.开启手机Wi-Fi通话&#xff0c;提升无信号或弱信号时的通话质量 Wi-Fi 通话(Wi-Fi calling)&#xff0c;又称VoWiFi&#xff0c;是一项名为“ Voice over Wi-Fi ”的服务&#xff0c;它允许手机用户使用他们的智能手机使用 Wi-Fi网络拨打电话&#xff0c;即在Wi-Fi环境下就能…

Echarts的认识和基本用法

Echarts介绍和使用 Echarts介绍 官网地址&#xff1a;Apache ECharts Echarts是一个基于JavaScript的开源可视化图表库&#xff0c;由百度前端开发团队研发和维护。它提供了丰富的图表类型、数据统计分析、动态数据更新、多维数据展示等功能&#xff0c;可以帮助开发人员在 W…

在JavaScript开发中,如何判断对象自身为空?

前言 如何判断一个对象为空是我们在开发中经常会遇到的问题&#xff0c;今天我们来聊聊几种经常使用的方法&#xff0c;以及在不同的场景下我们如何去使用。 1. JSON.stringify JSON.stringify 方法可以使对象序列化&#xff0c;转为相应的 JSON 格式。 const obj {};cons…

大语言模型训练的数据集从哪里来?

继续上篇文章的内容说说大语言模型预训练的数据集从哪里来以及为什么互联网上的数据已经被耗尽这个说法并不专业&#xff0c;再谈谈大语言模型预训练数据集的优化思路。 1. GPT2使用的数据集是WebText&#xff0c;该数据集大概40GB&#xff0c;由OpenAI创建&#xff0c;主要内…

Wireshark 学习笔记1

1.wireshark是什么 wireshark是一个可以进行数据包的捕获和分析的软件 2.基本使用过程 &#xff08;1&#xff09;选择合适的网卡 &#xff08;2&#xff09;开始捕获数据包 &#xff08;3&#xff09;过滤掉无用的数据包 &#xff08;4&#xff09;将捕获到的数据包保存为文件…