学习【全栈之巅】Node.js + Vue.js 全栈开发王者荣耀手机端官网和管理后台笔记(1.1-2.5)

【全栈之巅】Node.js + Vue.js 全栈开发王者荣耀手机端官网和管理后台

本项目是 学习Bilibili 全栈之巅 视频教程相关源码和体会
https://gitee.com/blaunicorn/node-vue-wangzherongyao
持续更新中…

1.1 王者荣耀全栈开发部分截图

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

1.2 配置环境,下载安装 node 和MongoDB server 、 vscode

1.3 项目介绍:admin是后台界面部分、web是前台界面部分、server是前后台的后端接口部分。部署到服务器上,localhost:3000地址是前台首页不是后台的首页,添加admin才是后台的首页

// 全局安装vuecli,-g 全局安装
npm i -g @vue/cli  
// 创建web页项目
vue create web 
// 创建管理后端项目
vue create admin 
  // 新建server文件夹,并在其下
  npm init -y
  npm i -g nodemon
  npm run serve //启动后台服务器

1.4 安装插件

// 全局安装nodemon
npm i -g nodemon
// admin端
vue add element
vue add router
npm install axios
// server端安装express@next版本  联接mongodb数据库 跨域 映射 上传文件中间件
npm i express@next mongoose cors inflection multer

1.5 server端自定义脚本中用nodemon运行代码

"serve": "nodemon index.js"

2.1 admin端创建分类及编辑页(admin/src/views/CategoryEdit.vue)

<template>
  <div class="about">
     //id 存在现实编辑,否则现实新建
    <h1>{{id ? "编辑":"新建"}}分类</h1>
    // 提交表单执行save方法
    <el-form label-width="120px" @submit.native.prevent="save">
      <el-form-item label="分类名称" >
        <el-input v-model="model.name"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" native-type="submit">上传</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  props:{
    id:{}
  },
  data(){
    return{
      model:{}
    }
  },
  methods:{
    async save(){
      if(this.id){
        this.$http.put(`/categories/${this.id}`,this.model)
      }else{
        this.$http.post('/categories',this.model)
      }
      this.$router.push('/categories/list')
      this.$message({
        type:'success',
        message:'保存成功'
      })
    },
    async fetch(){
      const res = await this.$http.get(`/categories/${this.id}`)
      this.model = res.data
    }
  },
  created(){
    this.id && this.fetch() // 判断是否通过router的props传回了id
  }
}
</script>
2.1.1 admin 端请求接口放在http.js中(admin/src/http.js)
import axios from 'axios'

const http = axios.create({
    baseURL:'http://localhost:3000/admin/api'
})

export default http
2.1.2 在Main.js中引用http.js(admin/src/main.js)
import http from './http'
Vue.prototype.$http = http

2.2 server端新建数据库、建立数据库模型、设置增删改查路由

// 后端连接数据库(server/plugins/db.js)
module.exports = app =>{
    const mongoose = require('mongoose')
    mongoose.connect('mongodb://127.0.0.1:27017/node-vue-moba',{
        useNewUrlParser: true
    })
}
// 创建表模板(server/models/Category.js)
const mongoose = require('mongoose')
const schema = new mongoose.Schema({
    name:{type:String}
})
module.exports = mongoose.model('Category',schema)
// 写后端接口(server/route/admin/index.js)
module.exports = app =>{
    const express = require('express')
    const router = express.Router()
    const Category = require('../../models/Category')
    // 增
    router.post('/categories',async(req,res)=>{
       const model = await Category.create(req.body)
       res.send(model)
    })
    // 改
    router.put('/categories/:id',async(req,res)=>{
        const model = await Category.findByIdAndUpdate(req.params.id,req.body)
        res.send(model)
     })
    //删
    router.delete('/categories/:id',async(req,res)=>{
        const model = await Category.findByIdAndDelete(req.params.id,req.body)
        res.send({
            success: true
        })
    })
    // 查
    router.get('/categories',async(req,res)=>{
        const items = await Category.find().limit(10)
        res.send(items)
     })
     router.get('/categories/:id',async(req,res)=>{
        const model = await Category.findById(req.params.id)
        res.send(model)
     })
    app.use('/admin/api',router)
}
// 监听端口(server/index.js)
const express = require('express')
const app = express()
app.use(express.json())
app.use(require('cors')())
require('./plugins/db')(app)
require('./route/admin')(app)
app.listen(3000,()=>{
    console.log('http://localhost:3000')
})

2.3 admin端定义vue-router路由

// admin端路由定义(admin/src/router/index.js)
const routes = [
    {
        path: '/',
        name: 'Main',
        component: () => import(/* webpackChunkName: "main" */ '../views/Main.vue'),
        children: [
            {
                path: '/categories/create',
                name: 'CategoriyEdit',
                component: () => import('../views/CategoriyEdit.vue')
            }
        ]
    }
]

2.4 父类编辑 axios 传参、接收参数

    // 后端server查(server\routes\admin\index.js)
    router.get('/categories', async (req, res) => {
        // console.log(req.query)
        const limit = +req.query.limit || 10
        const model = await Category.find().limit(limit)
        res.send(model)
    })
    // 前端admin查询请求(admin\src\views\CategoriesList.vue)
      async fetch() {
        const params = {
          limit: 10,
        };
        // 查询字符串传参 用 req.query接收   eg. http://localhost:9999/axios?id=1000  服务端 app.get('/axios', (req, res)
        // restful风格URL  传参 用req.params.id 接收 eg.http://localhost:9999/axios/1000  服务端需要:id
        const res = await this.$http.get('categories', { params });
        console.log(res);
        this.items = res.data;
      },

2.5 父类删除 axios 传参、接收参数

     // 前端admin删除具体物品请求(admin\src\views\CategoriesList.vue)
<template>
  <div class="about">
    <h1>分类列表</h1>
    <el-table :data="items">
      <el-table-column prop="_id" label="ID" width="230"> </el-table-column>
      <el-table-column prop="parent.name" label="上级分类" width="120">
      </el-table-column>
      <el-table-column prop="name" label="分类名称" width="120">
      </el-table-column>
      <el-table-column fixed="right" label="操作" width="120">
        <template slot-scope="scope">
          <el-button
            type="text"
            size="small"
            @click="$router.push(`/categories/edit/${scope.row._id}`)"
            >编辑</el-button
          >
          <el-button @click="remove(scope.row)" type="text" size="small"
            >删除</el-button
          >
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>
<script>
    ...
      async remove(row) {
        console.log(row);
        this.$confirm(`此操作将永久删除该分类${row.name}, 是否继续?`, '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning',
        })
          .then(async () => {
            const res = await this.$http.delete(`/rest/categories/${row._id}`);
            console.log(res);
            this.$message({
              type: 'success',
              message: '删除成功!',
            });
            this.fetch();
          })
          .catch(() => {
            this.$message({
              type: 'info',
              message: '已取消删除',
            });
          });
      },
</script>
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 全栈完整项目包括uniapp小程序、vue后台管理系统、node.js完整项目和mysql数据库。这个项目的目标是开发一个全面的解决方案,用于构建一个多平台的应用程序。 首先,我们将使用uniapp小程序开发前端界面。uniapp是一个跨平台开发框架,可以同时适用于微信小程序、支付宝小程序、H5、安卓和iOS等平台。我们可以使用uniapp提供的各种组件和API来创建用户界面和交互。 其次,我们将使用vue框架开发后台管理系统。Vue是一个轻量级的JavaScript框架,它提供了一种优雅的方式来构建用户界面。我们可以使用Vue的组件化开发思想和工具来构建管理系统的各个模块和功能。 然后,我们将使用node.js开发后端服务器。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,可以用于构建高性能的网络应用程序。我们可以使用Node.js的各种模块和框架来处理前端请求、访问数据库、实现业务逻辑等。 最后,我们将使用mysql数据库存储数据。MySQL是一个流行的关系型数据库管理系统,可以用于存储和管理应用程序中的数据。我们可以使用mysql的SQL语言来定义表结构、插入和更新数据、执行查询等操作。 这个全栈完整项目将涵盖前端开发后台开发、数据库设计和管理等多个方面。通过使用不同的技术和工具,我们可以构建一个功能齐全、用户友好的应用程序,并能在多个平台上运行。 ### 回答2: 全栈完整项目是指开发人员可以同时处理前端、后端和数据库的开发工作。在这个问题中,需要开发一个包括uniapp小程序、vue后台管理系统和node.js完整项目的全栈应用,并使用mysql数据库进行数据存储。 首先,我会基于uniapp框架开发一个小程序。uniapp是一个跨平台开发框架,可以同时开发iOS和Android平台的应用。我将使用vue语法进行开发,利用uniapp提供的组件和API实现小程序的各种功能,如用户登录、数据展示等。 其次,我会开发一个vue后台管理系统。vue是一个流行的前端框架,用于构建单页应用。我将使用vue和element-ui等插件来实现后台管理系统的前端界面,包括用户管理、数据统计等功能,并通过API与后端进行数据交互。 然后,我会使用node.js开发一个完整的后端项目。node.js是一个基于JavaScript运行的服务器端框架,具有高效、轻量级和事件驱动等特点。我将使用node.js编写服务器端的逻辑处理代码,包括用户认证、数据处理等功能。同时,我会使用express框架来简化开发流程,并使用mysql数据库进行数据的存储和查询。 最后,我会使用mysql数据库进行数据管理。mysql是一种常见的关系型数据库管理系统,我将使用它来设计和管理我所开发全栈应用所需要的表结构,并使用SQL语言进行数据的增删改查操作。 综上所述,我将使用uniapp、vuenode.js和mysql等技术栈,开发一个包含小程序、后台管理系统和完整的后端项目的全栈应用。这个应用将具备完整的功能,同时满足用户的需求,并且可以对数据进行有效地管理。 ### 回答3: 全栈开发是指一个开发者可以独自负责开发一个完整的项目,包括前端、后端和数据库的搭建与开发。以下是一个使用uniapp小程序作为前端、vue作为后台管理系统、node.js作为后端、mysql作为数据库的全栈完整项目的描述。 该项目的目标是开发一个综合性的小程序,实现包括用户登录注册、商品展示、购物车管理、订单生成等功能。具体的技术选型如下: 1. 前端部分使用uniapp小程序进行开发。Uniapp是一个使用 Vue.js 进行开发跨平台应用的前端框架,支持一次开发,多平台发布。开发者可以使用Vue的语法进行UI界面的开发,并集成了微信小程序的API。 2. 后台管理系统使用vue进行开发Vue是一个轻量级的JavaScript框架,可以快速搭建用户友好的界面。通过使用Vue,我们可以开发出一个方便管理商品、订单等数据的后台管理系统。 3. 后端使用node.js进行开发Node.js是一个基于Chrome V8引擎的开源后台运行环境,使用JavaScript进行编写。通过使用Node.js,我们可以实现用户登录注册、商品数据的增删改查等后端逻辑。 4. 数据库使用mysql进行搭建。MySQL是一个开源的关系型数据库管理系统,提供了高效稳定的数据存储和查询。通过使用mysql,我们可以存储用户信息、商品信息、订单信息等数据。 在项目开发过程中,我们可以使用uniapp提供的API与微信小程序进行交互,实现用户登录注册、商品展示等功能。通过vue开发后台管理系统,可以实现对商品和订单等数据的管理。并且,通过node.js连接mysql数据库,实现对数据的增删改查操作。 全栈开发者需要具备前端、后端以及数据库的知识和能力,能够独立进行应用开发和维护。这个全栈完整项目的开发将会全面锻炼开发者的技术水平,并且能够快速响应需求变化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值