美文网首页
10 vue-cli和SpringBoot前后端分离

10 vue-cli和SpringBoot前后端分离

作者: wshsdm | 来源:发表于2021-03-04 00:20 被阅读0次

1 创建SpringBoot项目

1.1 修改pom.xml文件

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.8.RELEASE</version>
    </parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <!--mp代码生成器-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-generator</artifactId>
        <version>3.4.1</version>
    </dependency>
    <!-- 添加 模板引擎 依赖 -->
    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity-engine-core</artifactId>
        <version>2.2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

1.2 添加SpringBoot配置文件main/resources/application.yml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/blobdb?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
mybatis-plus:
  mapper-locations: classpath*:com/blob/mapper/**Mapper.xml
server:
  port: 8090

1.3 添加启动文件

package com.blog;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("com.blog.dao")
@SpringBootApplication
public class AppStarter {
    public static void main(String[] args) {
        SpringApplication.run(AppStarter.class,args);
    }
}

1.4 创建实体类文件

package com.blog.entity;
import lombok.Data;
@Data
public class Msg {
    private String pass;
    private Integer age;
}

1.5 创建控制器类

package com.blog.controller;

import com.blog.entity.Msg;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/user/")
public class MsgActoin {
    //支持跨域
    @CrossOrigin
    @PostMapping(value = "/save",produces = "application/json;charset=UTF-8")
    @ResponseBody
    public Msg save(@RequestBody Msg po){
        System.out.println("得到参数:"+po);
//        po.setAge(po.getAge()+10);
        Msg re=new Msg();
        re.setAge(18);
        re.setPass("你哈密");
        return re;
    }
}

2 创建vue-cli项目(参照https://www.jianshu.com/p/05c8f3f0123d

2.1 在项目目录下安装相应的插件

cnpm install --save axios    //主要用来发送请求,可理解为ajax
cnpm install element-ui -S  //一个ui框架
cnpm install qs -S  //包装传回后台的数据防止接收不到 
cnpm install vue-router  //vue路由

完成后可以在package.json中可以查看到项目依赖

2.2 修改config/index.js配置文件,添加代理支持跨域请求

module.exports = {
  dev: {

    // Paths
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {
      '/api': {
        target:"http://127.0.0.1:8090/",
        chunkOrigins: true,// 允许跨域
        pathRewrite:{
          '^/api': '' // 路径重写,使用"/api"代替target
        }
      }
    }

2.3 修改主配置文件main.js,注册axios、elementUI等组件

import Vue from 'vue'
import App from './App'
import router from './router'
// 引入elemen-u控件
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import qs from 'qs'
import axios from 'axios'
Vue.prototype.$axios=axios
Vue.prototype.$qs = qs
// 使用use命令后才起作用
Vue.use(ElementUI)
Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

2.4 在components目录下创建Login.vue自定义组件

<template>
  <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
    <el-form-item label="密码" prop="pass">
      <el-input type="text" v-model="ruleForm.pass" autocomplete="off"></el-input>
    </el-form-item>
    <el-form-item label="确认密码" prop="checkPass">
      <el-input type="text" v-model="ruleForm.checkPass" autocomplete="off"></el-input>
    </el-form-item>
    <el-form-item label="年龄" prop="age">
      <el-input v-model.number="ruleForm.age"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
      <el-button @click="resetForm('ruleForm')">重置</el-button>
    </el-form-item>
  </el-form>
</template>

<script>
  export default {
    name: 'Login',
    data() {
      var checkAge = (rule, value, callback) => {
        if (!value) {
          return callback(new Error('年龄不能为空'));
        }
        setTimeout(() => {
          if (!Number.isInteger(value)) {
            callback(new Error('请输入数字值'));
          } else {
            if (value < 18) {
              callback(new Error('必须年满18岁'));
            } else {
              callback();
            }
          }
        }, 1000);
      };
      var validatePass = (rule, value, callback) => {
        if (value === '') {
          callback(new Error('请输入密码'));
        } else {
          if (this.ruleForm.checkPass !== '') {
            this.$refs.ruleForm.validateField('checkPass');
          }
          callback();
        }
      };
      var validatePass2 = (rule, value, callback) => {
        if (value === '') {
          callback(new Error('请再次输入密码'));
        } else if (value !== this.ruleForm.pass) {
          callback(new Error('两次输入密码不一致!'));
        } else {
          callback();
        }
      };
      return {
        ruleForm: {
          pass: '',
          checkPass: '',
          age: ''
        },
        rules: {
          pass: [
            { validator: validatePass, trigger: 'blur' }
          ],
          checkPass: [
            { validator: validatePass2, trigger: 'blur' }
          ],
          age: [
            { validator: checkAge, trigger: 'blur' }
          ]
        }
      };
    },
    methods: {
      submitForm(formName) {
        this.$refs[formName].validate((valid) => {
          if (valid) {
            //通过全局的qs对象封装发送的json格式字符串
            let xparam=this.$qs.stringify(this.$data.ruleForm)
            console.log(typeof(xparam),xparam)
            this.$axios.post('/api/user/save',this.$data.ruleForm).then(it=>{
                // console.log("服务返回:"+this.$qs.stringify(it));
               console.log('返回:'+it.data['pass'])
            }).catch(err=>{
              console.log("服务器报错:"+err)
            })
            // alert('submit!');
          } else {
            console.log('error submit!!');
            return false;
          }
        });
      },
      resetForm(formName) {
        this.$refs[formName].resetFields();
      }
    }
  }
</script>
<style scoped>
</style>

2.5 修改路由配置文件src/router/index.js文件

import Vue from 'vue'
import Router from 'vue-router'
import Login from '@/components/Login'
Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'Login',
      component:Login
    },
    {
      path: '/login',
      name: 'Login',
      component:Login
    }
  ]
})

相关文章

网友评论

      本文标题:10 vue-cli和SpringBoot前后端分离

      本文链接:https://www.haomeiwen.com/subject/oikhqltx.html