Vue-cli环境搭建&项目创建&测试Demo

it2023-11-24  72

Vue-cli环境搭建&项目创建&测试Demo

1. vue脚手架环境搭建&项目创建

1.1 安装Node.js(npm)

下载Node.js到本地,npm类似Maven项目,会用到包管理工具下的项目依赖等。 安装完成后查看Node.js版本 $ node-v $ npm -v

1.2 安装webpack

$ npm install webpack -g

1.3 安装vue-cli到本地

$ npm install vue-cli -g(全局安装) ps:若不是全局安装需配置环境变量 配置taobao镜像(cnpm),类似maven项目 $ npm config set registry=http://registry.npm.taobao.org 安装cnpm方法: $ npm install -g cnpm --registry=https://registry.npm.taobao.org $ cnpm install vue-cli -g 查看安装后vue-cli信息命令: $ npm info vue-cli 查看vue-cli版本 $ vue -V

1.4.通过vue-cli创建vue项目

$ vue init webpack projectName(项目名)

1.5.启动项目

进入到项目目录 $ cd projectName 启动项目: $ npm run dev

1.6 npm安装axios到本地

$ npm install --save axios

2. vue-cli 测试Demo

编写发送axios请求工具类 import axios from 'axios' //创建一个axios实例 const service = axios.create({ baseURL: 'http://localhost:8888', timeout: 5000 }) //请求发送前处理 service.interceptors.request.use(config => { console.log(config) return config }, error => { console.log(error) return Promise.reject(error) }) //请求发送后处理 service.interceptors.response.use(response => { console.log(response) return response.data.content }, error => { console.log(error) return Promise.reject(error) }) //导出方法 export default service
创建一个简单的springboot项目作为测试接口接收请求响应数据 用户登录模块控制层 @CrossOrigin //解决跨域问题 @RestController public class LoginController { /** * 模拟用户登录 * @param loginParam * @return */ @PostMapping("/login") public HashMap<String,Object> login(@RequestBody LoginParam loginParam){ HashMap<String, Object> res = new HashMap<>(); String rightName = "jackson"; String rightPass = "123"; if(loginParam.getUserName().equals(rightName)&& loginParam.getPassword().equals(rightPass)){ res.put("code", 2000); res.put("content", "login success"); res.put("msg", "OK"); }else { res.put("code", 5000); res.put("content", "login error"); res.put("msg", "用户名密码错误"); } return res; } @GetMapping("/getUserInfo") public HashMap<String,Object> getUserInfo(){ HashMap<String, Object> res = new HashMap<>(); String rightName = "jackson"; String rightPass = "123"; LoginParam loginParam = new LoginParam(rightName, rightPass); res.put("code", 2000); res.put("content", loginParam); return res; } } 展示商品模块控制层 @CrossOrigin @RestController public class ProductController { @PostMapping("/getAllProduct") public HashMap<String, Object> getAllProduct(){ Product product1 = new Product("1","可乐",3); Product product2 = new Product("2","雪碧",3); Product product3 = new Product("3","芬达",3); HashMap<String, Object> res = new HashMap<>(); ArrayList<Product> list = new ArrayList<>(); list.add(product1); list.add(product2); list.add(product3); res.put("content", list); return res; } @GetMapping("/getProductDetailById/{id}") public HashMap<String,Object> getProductById(@PathVariable("id") String id){ Product product1 = new Product("1","可乐",3); Product product2 = new Product("2","雪碧",3); Product product3 = new Product("3","芬达",3); HashMap<String, Object> res = new HashMap<>(); switch (id) { case "1" : res.put("content", product1); return res; case "2" : res.put("content", product2); return res; case "3" : res.put("content", product3); return res; default: res.put("content", null); return res; } } }
编写前端api接口发送异步请求 用户接口 import request from '@/utils/request' //@代表项目的src目录 export function loginByUserNameAndPassword(data) { return request({ url: '/login', method: 'post', data }) } export function getUserInfo() { return request({ url: '/getUserInfo', method: 'get', }) } 商品接口 import request from '@/utils/request' export function getAllProduct(data) { return request({ url: '/getAllProduct', method: 'post', data }) } export function getProductDetailById(id) { return request({ url: '/getProductDetailById/'+id, method: 'get', // data }) } 创建登录组件,商品组件,商品详情组件。组件中引入api中创建的方法,接收到后端响应的数据显示到页面,响应的格式统一为json格式。 import { getAllProduct, getProductDetailById } from '@/api/xxxx' export default { name: 'HelloWorld', data() { return { msg: 'Hello Murabito', productList: [] } }, methods: { //代码省略 } 商品列表组件使用钩子函数实现页面加载时执行查询商品列表方法,功能类似created()方法 mounted() { this.getProductList() } 将新增加的组件分别添加到路由中 import Vue from 'vue' import Router from 'vue-router' import HelloWorld from '@/components/HelloWorld' import login from '@/components/login' import productDetail from '@/components/productDetail' Vue.use(Router) export default new Router({ routes: [ { path: '/', name: 'HelloWorld', component: HelloWorld }, { path: '/login', name: 'login', component: login, }, { path: '/productDetail', name: 'productDetail', component: productDetail, } ] }) 在main.js中引入样式资源 //引入mui资源 import mui from '../static/mui/js/mui.js' import '../static/mui/css/mui.css' //全局配置mui Vue.prototype.$mui = mui //this.$mui 测试两种路由跳转页面的方法,区别在于刷新页面后数据是否会丢失 //path + query 刷新页面数据不丢失 // this.$router.push({ // path: '/productDetail', // query: { // id: id // } // }) //name + params 刷新页面数据会丢失 this.$router.push({ name:'productDetail', params:{ id: id } }) 获取页面跳转携带的参数查询商品详情 mounted() { //$router 代表所有路由 //$route 代表当前路由 let id = this.$route.params.id getProductDetailById(id).then(res =>{ alert(JSON.stringify(res)) this.productDetail = res }) }
登录成功后在后端做数据校验 使用Jwt工具类生成token,添加到浏览器的Cookie中 String token = JWTUtil.generateToken(user, Const.PRIVATE_KEY, 30); CookieUtil.responseCookie(token,response); 拿到token做非空校验 @RequestHeader("token") String token //请求参数 if(StringUtils.isEmpty(token) || token.equals("undefined")){ return new ServerResponse(500, "token不能为空"); }
最新回复(0)