Node.js+Vue.js全栈开发王者荣耀手机端官网和管理后台(二) || 后台及接口完结篇

news2024/11/14 3:44:37

文章目录

  • Node.js+Vue.js全栈开发王者荣耀手机端官网和管理后台(二)
    • 通用CRUD接口
    • 装备(物品)管理
    • 图片上传
    • 英雄管理
      • 英雄编辑【模型字段】
      • 英雄编辑【编辑表单】
    • 技能编辑【UI】
      • 技能编辑【交互】
    • 文章管理
    • 富文本编辑器(quill)
      • 富文本编辑器【图片上传】
    • 广告管理
    • 管理员账号管理(bcrypt)
    • 登录界面
    • 登录接口
      • 登录接口上
      • 登录接口下
    • 服务端登录校验(jwt)
      • 服务端登录校验(assert)
      • 服务端登录校验(中间件)
    • 客户端路由限制(beforeEach, meta)
    • 上传文件的登录校验(el-upload, headers)

Node.js+Vue.js全栈开发王者荣耀手机端官网和管理后台(二)


通用CRUD接口

在这里插入图片描述
这里真的很厉害

server/routes/admin/index.js

module.exports = app => {
    const express = require('express')
    const router = express.Router({
        mergeParams: true
    })
    // 创建分类
    router.post('/', async (req, res) => {
        const model = await req.Model.create(req.body)
        res.send(model)
    })
    // 编辑分类后保存分类
    router.put('/:id', async (req, res) => {
        const model = await req.Model.findByIdAndUpdate(req.params.id, req.body)
        res.send(model)
    })
    // 删除分类
    router.delete('/:id', async (req, res) => {
        await req.Model.findByIdAndDelete(req.params.id, req.body)
        res.send({
            success: true
        })
    })
    // 分类列表接口
    router.get('/', async (req, res) => {
        const queryOptions = {}
        if (req.Model.modelName === 'Category') {
            queryOptions.populate = 'parent'
        }
        const items = await req.Model.find().setOptions(queryOptions).limit(10)
        res.send(items)
    })
    // 获取某一个分类详情的接口
    router.get('/:id', async (req, res) => {
        const model = await req.Model.findById(req.params.id)
        res.send(model)
    })

    app.use('/admin/api/rest/:resource', async (req, res, next) => {
        const modelName = require('inflection').classify(req.params.resource)
        req.Model = require(`../../models/${modelName}`)
        next()
    }, router)

}

gitee

装备(物品)管理

接口部分

server/models/Item.js

const mongoose = require('mongoose')

const schema = new mongoose.Schema({
    name: String,
    icon: String
})

module.exports = mongoose.model('Item', schema)

物品管理-gitee

图片上传

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

gitee-图片上传

英雄管理

gitee-英雄管理

英雄编辑【模型字段】

server/models/Hero.js

const mongoose = require('mongoose')

const schema = new mongoose.Schema({
    name: String,
    avatar: String,
    title: String,
    categories: [{
        type: mongoose.Schema.Types.ObjectId, ref: 'Category'
    }],
    scores: {
        difficult: Number,
        skills: Number,
        attack: Number,
        survive: Number
    },
    skills: [{
        icon: String,
        name: String,
        description: String,
        tips: String
    }],
    items1: [{
        type: mongoose.Schema.Types.ObjectId, ref: 'Item'
    }],
    item2: [{
        type: mongoose.Schema.Types.ObjectId, ref: 'Item'
    }],
    usageTips: String,
    battleTips: String,
    teamTips: String,
    partners: [{
        hero: {
            type: mongoose.Schema.Types.ObjectId, ref: 'Hero'
        },
        description: String
    }]

})

module.exports = mongoose.model('Hero', schema)

英雄编辑【编辑表单】

英雄编辑-gitee

技能编辑【UI】

技能编辑【UI】-gitee

在这里插入图片描述

技能编辑【交互】

在这里插入图片描述
在这里插入图片描述

文章管理

文章管理-gitee

富文本编辑器(quill)

https://www.npmjs.com/package/vue2-editor

富文本编辑器【图片上传】

https://gitee.com/zhang-lijunKUN/node-vue-moba/commit/3d62589cd3e3164cb2cecbbef75cff1b96a01b5c

广告管理

https://gitee.com/zhang-lijunKUN/node-vue-moba/commit/8f6b612a1922c99e087b0662b234601d8dea7178

管理员账号管理(bcrypt)

在这里插入图片描述

管理员账号管理-gitee

登录界面

在这里插入图片描述

Login.vue

<template>
  <div class="login-container">
    <el-card header="请先登录" class="login-card">
      <el-form @submit.native.prevent="login">
        <el-form-item label="用户名">
          <el-input v-model="model.username"></el-input>
        </el-form-item>
        <el-form-item label="密码">
          <el-input show-password v-model="model.password"></el-input>
        </el-form-item>

        <el-form-item>
          <el-button type="primary" native-type="submit">登录</el-button>
        </el-form-item>
      </el-form>
    </el-card>
  </div>
</template>

<script>
export default {
  data() {
    return {
      model: {},
    };
  },
  methods: {
    login() {
      console.log(this.model);
    },
  },
};
</script>

<style scoped>
.login-card {
  width: 25rem;
  margin: 5rem auto;
}
</style>

登录接口

登录接口上

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

登录接口下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

服务端登录校验(jwt)

在这里插入图片描述
在这里插入图片描述

服务端登录校验(assert)

https://www.npmjs.com/package/http-assert

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

服务端登录校验(中间件)

在这里插入图片描述auth.js

module.exports = options => {
    const AdminUser = require('../models/AdminUser')
    const jwt = require('jsonwebtoken')
    const assert = require('http-assert')
    return async (req, res, next) => {
        const token = String(req.headers.authorization || '').split(' ').pop()
        assert(token, 401, '请先登录')
        const { id } = jwt.verify(token, req.app.get('secret'))
        assert(id, 401, '请先登录')
        req.user = await AdminUser.findById(id)
        assert(req.user, 401, '请先登录')

        await next()
    }
}

resource.js

module.exports = options => {

    return async (req, res, next) => {
        const modelName = require('inflection').classify(req.params.resource)
        req.Model = require(`../models/${modelName}`)
        next()
    }
}

在这里插入图片描述
服务端的登录检验-gitee

客户端路由限制(beforeEach, meta)

在这里插入图片描述
在这里插入图片描述

上传文件的登录校验(el-upload, headers)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
源码——gitee

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

23种设计模式(八)——工厂方法模式【对象创建】

文章目录 意图什么时候使用工厂方法真实世界类比工厂方法模式的实现工厂方法模式的优缺点亦称: 虚拟构造函数、Virtual Constructor、Factory Method 意图 在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将…

大数据-hadoop-MapReduce原理详解

MapReduce[1]是Google提出的一个软件架构&#xff0c;用于大规模数据集的并行运算。概念“Map&#xff08;映射&#xff09;”和“Reduce&#xff08;归约&#xff09;”&#xff0c;及他们的主要思想&#xff0c;都是从函数式编程语言借鉴的&#xff0c;还有从矢量编程语言借来…

【基于crul库编写源码实现上传文件到http服务器】

基于crul库编写源码实现上传文件到http服务器编译crul库(可以去我下载资源里面找)用postman生成代码postman生成的代码对应的http服务器的设置_msnap_send_to_httpserver函数有http通过json发送jpeg文件、以及上传ftp服务器、发邮件的实例编译crul库(可以去我下载资源里面找) …

MySQL数据库及数据表相关操作

一,前言1.典型数据库数据库圈子中典型代表:MySQLOracleSQL Server&#xff08;一般在学校学习的时候用到的是这个数据库&#xff09;Oracle是世界上公认的最好的数据库,但是我们现在所学习以及以后上班中大部分时候用到的数据库是MySQL,因为MySQL是开源免费的(任何人都可以阅读…

86.编码器-解码器架构以及代码实现

1. 重新考察CNN 2. 重新考察RNN 3. 编码器-解码器架构 4. 总结 使用编码器-解码器架构的模型&#xff0c;编码器负责表示输入&#xff0c;解码器负责输出 5. 代码实现 5.1 编码器 在编码器接口中&#xff0c;我们只指定长度可变的序列作为编码器的输入X。 任何继承这个Enco…

数据结构 - 学习笔记 - 红黑树前传——234树

数据结构 - 学习笔记 - 红黑树前传——234树简介结点类型与红黑树对应关系插入逻辑插入步骤演示2结点插入3结点插入&#xff08;红黑树旋转&#xff09;共对应6种红黑树情形有4种情形需要再平衡4结点插入&#xff08;红黑树变色&#xff09;234树转红黑树触发分裂有4种情形需要…

234. 回文链表

1、题目描述 额外要求&#xff1a;你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题&#xff1f; 2、题解 2.1 解题思路1 使用额外的栈空间&#xff0c;先将链表中所有的元素依次压入栈中&#xff0c;得到链表的逆序&#xff0c;然后将栈中的元素依次弹出和链表中的元素从…

C++关于初始化列表的细节(必须/不能使用初始化列表的情况、初始化列表的效率分析)

必须使用初始化列表初始化的变量 const修饰的成员变量。 class A { public:A() { a 1; }int a; };构造函数内使用a 1初始化变量a&#xff0c;但这本质上是一种赋值&#xff0c;而我们都知道&#xff0c;const类型的变量是不允许赋值的。 没有默认构造函数的成员变量 所有变量…

百度安全在线查询提示风险原因分析与解决思路

很多站长看到自己的网站被百度提示&#xff1a;“百度网址安全中心提醒您&#xff1a;该页面可能存在违法信息”&#xff0c;这样的提示&#xff0c;都会惊讶自己网站昨天还好好的&#xff0c;怎么今天就提示这样的信息呢&#xff1f;在弄清楚这个问题之前&#xff0c;我们要知…

实时频谱仪的外部I、Q输出端口的同步扫描介绍

实时频谱分析仪与外部GPIO&#xff0c;I、Q输出端口等集成在一起。外部GPIO由外部触发功能组成&#xff0c;通过使用外部硬件和/或多个RTSA设备&#xff0c;可以实现同步扫描设置&#xff0c;以自动进行频谱扫描和捕获。同时&#xff0c;I、Q输出端口有助于与外部高速数字化仪集…

联合证券|日元疯狂跳水30000点!神秘无人机现身韩国萨德基地!

刚刚&#xff0c;又有大事发生&#xff01; 日本央行意外宣告保持收益率曲线忍受区间不变。日元忽然大暴跌&#xff0c;日元兑美元狂泻超三万点。韩国也有大音讯&#xff0c;据韩联社报导&#xff0c;1月17日&#xff0c;一架无人机挨近韩国“萨德”基地时被美军用搅扰枪击落&a…

2023跳槽最新面试题整理——JVM系列

今天是农历2022年腊月二十七了&#xff0c;和往常的春节假期、五一假期和十一假期一样都是团队中坚持到最后的一个。没几天也要快过年了&#xff0c;我先提前向大家拜个早年——祝大家兔年大吉&#xff0c;新春快乐&#xff0c;财源滚滚&#xff0c;万事如意。 今年从十一…

如何使用 Selenium 实现自动化操作?

目录 前言 一、关于Selenium 1.1、为什么选择它作为web自动化的测试工具&#xff1f; 1.2、Selenium操作浏览器的原理 二、实现一个简单的自动化 2.1、使用自动化操作浏览器 2.2、Selenium常用的API 2.2.1、查找页面元素 小结 前言 本篇咱们来谈谈Selenium自动化脚本是…

pfx证书转pem、crt、key

今天测试端的服务器突然不能下载苹果APP了&#xff0c;经查看&#xff0c;发现原来是测试环境的https证书过期了&#xff0c;需要更换证书&#xff0c;于是赶紧从阿里云更新我们的最新证书 我们程序部署在tomcat上&#xff0c;于是下载tomcat版本&#xff0c;下载完成后如下 我…

【微信小程序-原生开发】实用教程05-首页(含自定义调试模式、插入图片、图文排版、底部留白、添加本地图片)

开始前&#xff0c;请先完成启动/欢迎/首屏广告页的开发&#xff0c;详见 【微信小程序-原生开发】实用教程04-启动/欢迎/首屏广告页&#xff08;含倒计时、添加文字、rpx、定义变量和函数、读取变量、修改变量、wx.reLaunch 页面跳转、生命周期 onReady等) https://blog.csdn…

输入设备应用

1.输入设备其实就是能够产生输入事件的设备就称为输入设备&#xff0c; 常见的输入设备包括鼠标、键盘、触摸屏、按钮等等&#xff0c;它们都能够产生输入事件&#xff0c;产生输入数据给计算机系统。2.对于输入设备的应用编程其主要是获取输入设备上报的数据、 输入设备当前状…

驱动程序那点事儿

是什么 驱动程序是一个软件组件&#xff0c;&#xff08;添加到操作系统中的一小块代码&#xff09;&#xff0c;是操作系统和设备通信的桥梁。应用程序需要从设备中读取某些数据&#xff0c;操作系统会调用由驱动程序实现的函数。驱动程序了解如何与设备硬件通信以获取数据。当…

菜鸟程序员如何快速进阶成为编程老司机?

菜鸟程序员如何摆脱稚嫩&#xff0c;快速成长为一名资深码农&#xff1f; 以下这些事情&#xff0c;帮你快速打好基础。 如果你想成为更好的开发者&#xff0c;你应该尤其注意第10点和第14点。 1.积极大胆地谷歌。你得知道如何有效地组织搜索关键字&#xff0c;查阅别人写的…

高并发系统设计 --热点key问题解决

热点Key问题&#xff0c;这是一个老生常谈的问题了&#xff0c;今天我们来仔细的去剖析这个问题。 热点key带来的问题 流量集中。达到服务器处理上限&#xff08;CPU&#xff0c;网络IO等&#xff09;会影响在同一个Redis实例上其他key的读写请求操作热key请求落到同一个Redi…

【魅力开源】第7集:开源ERP系统Odoo发展史(Odoo中文社区野史2019版)

文章目录前言历程后记前言 开源 ERP 系统 Odoo 的发展史。 历程 2002 年比利时13 岁开 始学习编程序的 Fabien Pinckaers 所创建创办了Tiny Sprl 公司。Tiny Sprl 公司的第一个产品就是开发 Tiny ERP&#xff0c;即后来的 OpenERP&#xff0c;现在改名为Odoo。 2007 年 Ope…