前后端分离之Vue
Posted 赵云个人中心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前后端分离之Vue相关的知识,希望对你有一定的参考价值。
Vue环境配置
一、软件安装
1.Node.js的安装
Vue环境运行依赖Node.js,首先安装Node.js.Node.js的官方网站https://nodejs.org/en/download/,选择对应的版本下载,本文的环境为Windows 64位,选择Windows Installer(.msi) 64安装,按照提示安装即可。安装结束可检测是否安装成功
node -v
2.安装npm
npm(node package manager),通常称为Node包管理器,顾名思义,主要功能就是管理node包,包括:安装、卸载、更新等等。这里采用淘宝的镜像,相比国外的镜像,下载速度能更快一点
npm install -g cnpm --registry=https://registry.npm.taobao.org
查看时候安装成功
3.安装vue-cli
npm install vue-cli -g
安装结束后,可用vue -V检测版本信息,查看是否安装成功
4.安装webpack
npm install webpack -g
二、创建Vue项目
采用的是Vue指令,生成Vue项目,创建的流程如下
在合适的文件夹位置选择以cmd窗口运行
//创建一个基于webpack新项目
1.vue init webpack first-vue
//Enter进入下一步,按照指示选择相应的选项
2.cd first-vue//进入生成的项目文件
3.npm run dev //以生产环境启动项目
4.http://localhost:8080 //浏览器登陆验证
生成的目录结构
三、界面成功效果
四、安装问题解决
1.-4048错误码,权限问题
npm ERR! path F:\2018毕业论文\vueproject\my-vue\my-first\node_modules\fsevents\n
ode_modules\getpass\node_modules
npm ERR! code EPERM
npm ERR! errno -4048
npm ERR! syscall scandir
npm ERR! Error: EPERM: operation not permitted, scandir 'F:\2018毕业论文\vueproj
ect\my-vue\my-first\node_modules\fsevents\node_modules\getpass\node_modules'
npm ERR! { Error: EPERM: operation not permitted, scandir 'F:\2018毕业论文\vuep
roject\my-vue\my-first\node_modules\fsevents\node_modules\getpass\node_modules'
npm ERR! stack: 'Error: EPERM: operation not permitted, scandir \'F:\\2018毕业
论文\\vueproject\\my-vue\\my-first\\node_modules\\fsevents\\node_modules\\getpas
s\\node_modules\'',
解决办法:
直接用命令清理缓存就行,
npm cache clean --force
2.找不到modules错误
Module build failed: Error: Cannot find module 'stylus'
at Function.Module._resolveFilename (module.js:489:15)
at Function.Module._load (module.js:439:25)
at Module.require (module.js:517:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (D:\project\sell\node_modules\_stylus-loader@2.5.1@sty
lus-loader\index.js:2:14)
解决办法,单独安装对应的模块
npm install stylus@latest
五、相关链接
Springboot整和Vue,实现前后台的分离,可参考
前后端分离之Vue(二)前后端整合http://blog.csdn.net/shenbug/article/details/79542717
前后端分离之Vue(三) Vue爬过的那些坑 http://blog.csdn.net/shenbug/article/details/79547171
前后端分离之Vue(二)前后端结合
置顶 2018年03月13日 20:10:13 阅读数:4398
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shenbug/article/details/79542717
前后端的结合
前言:前后端分离趋势越来越明显,分离的好处在于前后端可独立进行开发进行,前端写前端的代码,后端写后端的代码,后端提供相应的数据接口提供给前端。本文采用的是Vue+springboot的结合,做了一个登陆的demo,主要是理解前后端如何结合在一起,这里演示的为前后端在各自的服务器上运行,可参考前后端分离之Vue(一)Vue环境搭建,建立Vue项目
一、后端服务器的开发
后端采用的是SSM的框架结构进行改造,将前端部分交由Vue看来完成,只负责请求处理。这里只列举变化的部分,不变的部分springboot搭建的SSM结构即可,具体后端代码可参看https://github.com/dgyuanjun/SpringBoot-Vue.git
1.跨域的处理
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
/**
* @author Administrator
* @create 2018/3/12-15:17
* @DESCRIPTION 跨域系统配置
*/
@Configuration
public class CorsConfig {
/**
允许任何域名使用
允许任何头
允许任何方法(post、get等)
*/
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
// allowCredential 需设置为true
corsConfiguration.setAllowCredentials(true);
return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(source);
}
}
2.统一API响应结果封装
import com.alibaba.fastjson.JSON;
/**
* @author Administrator
* @create 2018/3/12-14:31
* @DESCRIPTION 统一API响应结果封装
*/
public class RestResult {
private int code;//状态码
private String message;//消息
private Object data;//数据
get.set方法
}
3.响应码的枚举
/**
* @author Administrator
* @create 2018/3/12-14:33
* @DESCRIPTION 响应码枚举,参考HTTP状态码的语义
*/
public enum ResultCode {
SUCCESS(200),//成功
FAIL(400),//失败
UNAUTHORIZED(401),//未认证(签名错误)
NOT_FOUND(404),//接口不存在
INTERNAL_SERVER_ERROR(500);//服务器内部错误
private final int code;
ResultCode(int code) {
this.code = code;
}
public int code() {
return code;
}
}
4.接口响应信息生成
import org.springframework.stereotype.Component;
/**
* 工厂模式
* 接口信息生成工具
* 。@Component 添加到Spring组件中
* Created by bekey on 2017/12/10.
*/
@Component
public class ResultGenerator {
private static final String SUCCESS = "success";
//成功
public RestResult getSuccessResult() {
return new RestResult()
.setCode(ResultCode.SUCCESS)
.setMessage(SUCCESS);
}
//成功,附带额外数据
public RestResult getSuccessResult(Object data) {
return new RestResult()
.setCode(ResultCode.SUCCESS)
.setMessage(SUCCESS)
.setData(data);
}
//成功,自定义消息及数据
public RestResult getSuccessResult(String message,Object data) {
return new RestResult()
.setCode(ResultCode.SUCCESS)
.setMessage(message)
.setData(data);
}
//失败,附带消息
public RestResult getFailResult(String message) {
return new RestResult()
.setCode(ResultCode.FAIL)
.setMessage(message);
}
//失败,自定义消息及数据
public RestResult getFailResult(String message, Object data) {
return new RestResult()
.setCode(ResultCode.FAIL)
.setMessage(message)
.setData(data);
}
//自定义创建
public RestResult getFreeResult(ResultCode code, String message, Object data) {
return new RestResult()
.setCode(code)
.setMessage(message)
.setData(data);
}
}
具体代码可参考:https://github.com/dgyuanjun/SpringBoot-Vue.git
二、Vue前端的开发
1.新建登陆页面,在components里,新建Login.vue
<template>
<div class="login">
{{ message }}
<input v-model="username" placeholder="用户名">
<input v-model="password" placeholder="密码">
<button v-on:click="login">登陆 </button>
</div>
</template>
<script>
export default {
name: "login",
data() {
return {
message: 'Hello Vue!',
username: '',
password: ''
}
},
http: {
headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
},
methods: {
login: function () {
var _this = this;
console.log(_this.username+_this.password);
_this.$http.post('http://localhost:8080/person/login', {
username: _this.username,
password: _this.password
},{emulateJSON:true}
)
.then(function (response) {
var errorcode = response.data.code;
console.log(response.data.data)
if (errorcode == "200") {
_this.$router.push(
{ path: '/HelloWorld',
query: {
user: response.data.data,
}
});
} else {
_this.$router.push({ path: '/Test' });
}
})
.catch(function (error) {
console.log(error);
});
}
}
}
</script>
<style scoped>
</style>
2.新建登陆失败的提示页面Fail.vue,成功的页面可采用原有的HelloWorld.vue
<template>
<div class="hello">
<h2>{{ msg }}</h2>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
data () {
return {
msg: '登陆失败'
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1, h2 {
font-weight: normal;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
3.将组件添加到路由表中,在router下的index.js文件
import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'//组件的位置
import Login from '@/components/Login'
import Fail from '@/components/Fail'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/',//系统的首页面url
name: 'Login',
component: Login//对应上文的import
},{
path: '/HelloWorld',
name: 'HelloWorld',
component: HelloWorld
},{
path: '/Fail',
name: 'Fail',
component: Fail
}
]
})
4.main.js文件添加vue-resource,支持http请求,如果未安装依赖包,先npm安装依赖
$ npm install vue-resource
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import VueResource from 'vue-resource'
Vue.use(VueResource);
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
components: { App },
template: '<App/>'
})
三、测试效果
1.登陆页面
2.成功后显示后台数据信息
3.登陆失败
相关链接
前后端分离之Vue(一)Vue环境搭建 http://blog.csdn.net/shenbug/article/details/79541218
前后端分离之Vue(三) Vue爬过的那些坑 http://blog.csdn.net/shenbug/article/details/79547171
爬过得那些坑
前言:在整个Vue的过程中,遇到了不少坑。查找不同的资料,把这些坑给填了,记录下这些坑,以及解决办法。
一、Http请求的那些坑
1.不支持http请求
表现为:程序启动正常,点击按妞不跳转,后台无响应,浏览器调试出现
Uncaught TypeError: Cannot read property 'post' of undefined
解决办法:添加vue-resource支持,在main.js添加
import VueResource from 'vue-resource'
Vue.use(VueResource);
2.post请求,后台接收参数为null
表现为:后台响应但是参数为null,正确的登陆失效,调试时,参数为from object
解决办法:http请求中,添加
{emulateJSON:true}
全部的Http请求部分代码为
_this.$http.post('http://localhost:8080/person/login', {
username: _this.username,
password: _this.password
}
,{emulateJSON:true}
)
.then(function (response) {
var errorcode = response.data.code;
if (errorcode == "200") {
_this.$router.push(
{ path: '/HelloWorld',
query: {
user: response.data.data,
}
});
} else {
_this.$router.push({ path: '/Fail' });
}
})
.catch(function (error) {
console.log(error);
});
3、正确处理后,跳转到空页面
原因:路由的url配置有问题,注意组件的引用的对应关系以及path的路径问题
4.Request请求变成Options
解决办法:设置头格式
http: {
headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
},
二、Vue视图之间的跳转实现
1.引用router组件
2.在router.js添加对应的view,以及相对应的path的配置
3.this.$router.push({path:'url'})
4.可参照上文的Http请求部分代码
三、Vue跳转传递参数
采用编程式的实现方式
传递参数
_this.$router.push(
{ path: '/HelloWorld',//跳转的路径
query: {//query 代表传递参数
user: response.data.data,//参数名key,以及对应的value
}
});
接收参数
this.$route.query.user
user代表的参数名,不但可以传递单个参数,也可以传递对应,解析的方式user.属性
四、实例,登陆页面的Vue代码
<template>
<div class="login">
{{ message }}<br/>
<input v-model="username" placeholder="用户名"><br/>
<input v-model="password" placeholder="密码"><br/>
<button v-on:click="login">登陆 </button>
</div>
</template>
<script>
export default {
name: "login",
data() {
return {
message: 'Vue 登陆页面',
username: '',
password: ''
}
},
http: {
headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
},
methods: {
login: function () {
var _this = this;
console.log(_this.username+_this.password);
_this.$http.post('http://localhost:8080/person/login', {
username: _this.username,
password: _this.password
}
,{emulateJSON:true}
)
.then(function (response) {
var errorcode = response.data.code;
if (errorcode == "200") {
_this.$router.push(
{ path: '/HelloWorld',
query: {
user: response.data.data,
}
});
} else {
_this.$router.push({ path: '/Fail' });
}
})
.catch(function (error) {
console.log(error);
});
}
}
}
</script>
<style scoped>
</style>
五、实例demo源码下载
相关链接
前后端分离之Vue(一)Vue环境搭建 http://blog.csdn.net/shenbug/article/details/79541218
前后端分离之Vue(二)前后端整合http://blog.csdn.net/shenbug/article/details/79542717
以上是关于前后端分离之Vue的主要内容,如果未能解决你的问题,请参考以下文章