Vue3中 使用json-server作为虚拟数据库存储数据

JSON-server基本使用

JSON-server安装

1.  JSON-server一般使用0.17.4版本 npm i json-server@0.17.4 -g

2.  已经安装JSON-server命令行查看版本号json-server -v

3.  如果已经安装其它版本JSON-server可以卸载npm uninstall json-server -g

JSON-server启动

1.  一个独立空目录启动JSON-server这个目录不要放到前端代码

2.  目录下执行json-server -w db.json 就能启动起来JSON-server

● 会在空目录创建默认db.json

"goods": [
    {
      "id": 1,
      "img": "https://img0.baidu.com/it/u=2612044646,3112866507&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500",
      "title": "华为Mate60",
      "desc": "华为旗舰手机",
      "price": 8999,
      "amount": 100
    },
    {
      "id": 2,
      "img": "https://img2.baidu.com/it/u=1812068763,4050646555&fm=253&fmt=auto&app=138&f=JPEG?w=666&h=500",
      "title": "华为Mate50",
      "desc": "华为旗舰手机50",
      "price": 7999,
      "amount": 50
    }
  ]

● 默认占用3000端口启动加上-p参数制定端口号json-server -w db.json -p 3001

JSON-server使用

1.  获取列表数据(常用于分类页、搜索结果页等,展示列表数据的场合):

方法get

URL数据字段 /goods

const init = async () => {
    const res = await axios.get('http://localhost:3000/goods')
    res.data // 就是列表数据
}

2.  获取详情数据

方法get

URL数据字段/id `/goods/${id}`

const init = async () => {
    const res = await axios.get(`http://localhost:3000/goods/${id}`)
    res.data // 就是列表数据
}

3

JSON-server使用中间件实现登录接口

中间件的意义仅仅db.json无法相关逻辑复杂逻辑处理需要借助中间件提供Node.js运行环境进行特殊处理

此外借助中间件我们可以创建独特接口

token.js

// token: 看起来是乱码、随机数。可以防止被解密。无法由token字符串,反推出用户使用的密码等信息
// 在知道密码的情况下,可以迅速反解加密前的信息,能够方便做验证
const jwt = require("jsonwebtoken");
module.exports = function (req, res, next) {
  // req: 请求对象;res: 接口返回数据对象; next: 调用时把控制权传递给下一个中间件
  if (req.method == "POST" && req.path === "/login") {
    // if判断中,就是对登录接口进行的处理
    const { username, password } = req.body;
    if (username === "zhangsan" && password === "123456") {
      // jwt.sign的第二个参数,是固定的字符串,只需要保证,加密和解密
      const token = jwt.sign({ username }, "2024年依旧热爱前端");
      // 生成token后,通过网络请求接口返回给前端
      return res.status(200).json({
        msg: "登录成功",
        data: token,
      });
    } else {
      return res.status(200).json({
        msg: "登录失败,账号密码错误",
        data: "",
      });
    }
  }

  // 后续的所有请求,都需要在header上带上token
  // 接口程序在去到请求之后解析出来token
  try {
    jwt.verify(req.headers.token, "2024年依旧热爱前端");
  } catch (e) {
    return res.status(200).json({
      msg: "token已失效",
    });
  }
  next();
};

启动中间件: json-server -w db.json -m token.js

增加了-m参数中间完整路径

前端发送登录请求:

import axios from 'axios'
import { showToast } from 'vant'

const doLogin = async (values) => {
  const res = await axios.post('http://localhost:3000/login', values)
  const token = res.data.data
  if (token) {
    localStorage.setItem('todos-token', token)
    router.push({ name: 'Home' })
  } else {
    showToast('登录失败!')
  }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值