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

devtools/2025/1/14 18:44:23/

<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) {// 发送登录请求到本地模拟的APIfetch('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);  // 模拟保存tokenwindow.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 中是否有 tokenconst token = localStorage.getItem('token');if (!token) {// 如果没有 token,则重定向到登录页面window.location.href = 'index.html';}function logout() {// 清除 localStorage 中的 tokenlocalStorage.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点击登录

即可进入到后台管理页面


http://www.ppmy.cn/devtools/150182.html

相关文章

银河麒麟桌面操作系统搭建FTP服务器

一、操作环境 服务端&#xff1a;银河麒麟桌面操作系统V10 客户端&#xff1a;银河麒麟桌面操作系统V10 二、服务器配置 说明&#xff1a;以下命令均在终端执行。鼠标点击桌面右键&#xff0c;在终端中打开。 操作步骤&#xff1a; &#xff08;一&#xff09;安装vsftpd…

反弹SHELL不回显带外正反向连接防火墙出入站文件下载

什么是反弹shell 正向连接正向连接&#xff08;Forward Connection&#xff09;&#xff1a;正向连接是一种常见的网络通信模式&#xff0c;其中客户端主动发起连接到服务器或目标系统。正向连接通常用于客户端-服务器通信&#xff0c;客户端主动请求服务或资源&#xff0c;例如…

单元测试MockitoExtension和SpringExtension

1. MockitoExtension MockitoExtension 是 JUnit 5 提供的一个扩展&#xff0c;用于支持 Mockito 的集成。它可以自动初始化标记为 Mock、InjectMocks 等的 Mockito 对象&#xff0c;而不需要显式调用 MockitoAnnotations.initMocks(this)。 主要特点: 自动初始化 Mock、Spy…

ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders论文解读

论文地址&#xff1a;https://arxiv.org/abs/2301.00808 论文相对ConvNeXt V1的改进主要两点 全卷积掩码自编码器&#xff08;FCMAE&#xff09;Global Response Normalization&#xff0c;去除Layer scale 什么是layer scale 实验 先用FCMAE预训练&#xff0c;然后微调

UML系列之Rational Rose笔记三:活动图(泳道图)

一、新建活动图&#xff08;泳道图&#xff09; 依旧在用例视图里面&#xff0c;新建一个activity diagram&#xff1b;新建好之后&#xff0c;就可以绘制活动图了&#xff1a; 正常每个活动需要一个开始&#xff0c;点击黑点&#xff0c;然后在图中某个位置安放&#xff0c;接…

《AI发展的双重困境:技术扩展性与用户体验的矛盾,以及AGI理想与现实的差距》

扩展性在技术层面仍然有效&#xff0c;但用户体验的改善速度减缓 1. 扩展性的技术有效性 定义: 扩展性&#xff08;scaling&#xff09;指的是在增加计算资源&#xff08;如GPU、内存等&#xff09;时&#xff0c;模型性能的提升。理论上&#xff0c;随着训练数据和计算能力的…

java.net.SocketException: Connection reset 异常原因分析和解决方法

导致此异常的原因&#xff0c;总结下来有三种情况&#xff1a; 一、服务器端偶尔出现了异常&#xff0c;导致连接关闭 解决方法&#xff1a; 采用出错重试机制 二、 服务器端和客户端使用的连接方式不一致 解决方法&#xff1a; 服务器端和客户端使用相同的连接方式&#xff…

【13】制作镜像以及重启实例

制作镜像 k8s集群 有两个镜像需要制作&#xff0c;一个是master节点&#xff0c;一个是node节点。 在master节点上成功部署了k8s的控制平面&#xff0c;在node节点上部署了worker节点的配置&#xff0c;不知道打包镜像重启之后集群的状态是什么样的。 确认集群在运行&#…