SPA项目开发之登录注册,web开发毕业谁

本文详细介绍了在Vue项目中使用axios进行前后端数据交互,包括处理跨域问题、设置请求头、登录逻辑以及箭头函数中this的问题。还涉及到了get和post的区别以及如何通过qs库处理URL参数。
摘要由CSDN通过智能技术生成

return response;

}, function(error) {

return Promise.reject(error);

});

// // 路由请求拦截

// // http request 拦截器

// axios.interceptors.request.use(

// config => {

// //config.data = JSON.stringify(config.data);

// //config.headers[‘Content-Type’] = ‘application/json;charset=UTF-8’;

// //config.headers[‘Token’] = ‘abcxyz’;

// //判断是否存在ticket,如果存在的话,则每个http header都加上ticket

// // if (cookie.get(“token”)) {

// // //用户每次操作,都将cookie设置成2小时

// // cookie.set(“token”, cookie.get(“token”), 1 / 12)

// // cookie.set(“name”, cookie.get(“name”), 1 / 12)

// // config.headers.token = cookie.get(“token”);

// // config.headers.name = cookie.get(“name”);

// // }

// return config;

// },

// error => {

// return Promise.reject(error.response);

// });

// // 路由响应拦截

// // http response 拦截器

// axios.interceptors.response.use(

// response => {

// if (response.data.resultCode == “404”) {

// console.log(“response.data.resultCode是404”)

// // 返回 错误代码-1 清除ticket信息并跳转到登录页面

// // cookie.del(“ticket”)

// // window.location.href=‘http://login.com’

// return

// } else {

// return response;

// }

// },

// error => {

// return Promise.reject(error.response) // 返回接口返回的错误信息

// });

export default axios;

引入main.js配置

import axios from ‘@/api/http’  #vue项目对axios的全局配置

import VueAxios from ‘vue-axios’

Vue.use(VueAxios,axios)

前后端数据交互开始

src/views/Login.vue

用户登录

<el-button style=“width:100%;” type=“primary” @click=“submitForm”>提交

<el-link type=“success” @click=“toReg”>用户注册

忘记密码

submitForm() {

let url = this.axios.urls.SYSTEM_USER_DOLOGIN;

this.axios.post(url, this.ruleForm).then((resp) => {

console.log(resp);

if (resp.data.code == 1) {

this.$message({

message: resp.data.msg,

type: ‘success’

});

} else {

this.$message({

message: resp.data.msg,

type: ‘warning’

});

}

}).catch(function(error) {

console.log(error);

});

}

登录失败

登录成功

三、This 指针带来的变量污染

=====================

登录方法中用到箭头函数,由于this.message和this.axios中的this不是同一个,this的指向是由所在函数的调用方式决定的,message存在于全局中,所以引用箭头函数

submitForm() {

let url = this.axios.urls.SYSTEM_USER_DOLOGIN;

this.axios.post(url, this.ruleForm).then((resp) => {

console.log(resp);

if (resp.data.code == 1) {

this.$message({

message: resp.data.msg,

type: ‘success’

});

} else {

this.$message({

message: resp.data.msg,

type: ‘warning’

});

}

}).catch(function(error) {

console.log(error);

});

}

将this在上面定义也可以解决

四、ajax 跨域问题

===============

http://localhost:8088/#/

协议+IP+port+项目

跨域产生的原因:上面四个中有一个不同,都会产生

凡是错误中出现了CORS就是 跨域问题

解决,设置允许访问的ip,设置允许访问的请求方式

web.xml

corsFilter

com.zking.vue.util.CorsFilter

corsFilter

/*

CorsFilter.java

// Access-Control-Allow-Origin就是我们需要设置的域名

// Access-Control-Allow-Headers跨域允许包含的头。

// Access-Control-Allow-Methods是允许的请求方式

resp.setHeader(“Access-Control-Allow-Origin”, “*”);// *,任何域名

resp.setHeader(“Access-Control-Allow-Methods”, “POST, GET, PUT, DELETE”);

package com.zking.vue.util;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

  • 配置tomcat允许跨域访问

  • @author Administrator

*/

public class CorsFilter implements Filter {

@Override

public void init(FilterConfig filterConfig) throws ServletException {

}

// @Override

// public void doFilter(ServletRequest servletRequest, ServletResponse

// servletResponse, FilterChain filterChain)

// throws IOException, ServletException {

// HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;

//

// // Access-Control-Allow-Origin就是我们需要设置的域名

// // Access-Control-Allow-Headers跨域允许包含的头。

// // Access-Control-Allow-Methods是允许的请求方式

// httpResponse.addHeader(“Access-Control-Allow-Origin”, “*”);// *,任何域名

// httpResponse.setHeader(“Access-Control-Allow-Methods”, "POST, GET, PUT,

// DELETE");

// // httpResponse.setHeader(“Access-Control-Allow-Headers”, "Origin,

// // X-Requested-With, Content-Type, Accept");

//

// // 允许请求头Token

// httpResponse.setHeader(“Access-Control-Allow-Headers”,

// “Origin,X-Requested-With, Content-Type, Accept, Token”);

// HttpServletRequest req = (HttpServletRequest) servletRequest;

// System.out.println(“Token=” + req.getHeader(“Token”));

// if(“OPTIONS”.equals(req.getMethod())) {

// return;

// }

//

//

// filterChain.doFilter(servletRequest, servletResponse);

// }

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)

throws IOException, ServletException {

HttpServletResponse resp = (HttpServletResponse) servletResponse;

HttpServletRequest req = (HttpServletRequest) servletRequest;

// Access-Control-Allow-Origin就是我们需要设置的域名

// Access-Control-Allow-Headers跨域允许包含的头。

// Access-Control-Allow-Methods是允许的请求方式

resp.setHeader(“Access-Control-Allow-Origin”, “*”);// *,任何域名

resp.setHeader(“Access-Control-Allow-Methods”, “POST, GET, PUT, DELETE”);

// resp.setHeader(“Access-Control-Allow-Headers”, "Origin,X-Requested-With,

// Content-Type, Accept");

// 允许客户端,发一个新的请求头jwt

resp.setHeader(“Access-Control-Allow-Headers”, “Origin,X-Requested-With, Content-Type, Accept, jwt”);

// 允许客户端,处理一个新的响应头jwt

resp.setHeader(“Access-Control-Expose-Headers”, “jwt”);

// String sss = resp.getHeader(“Access-Control-Expose-Headers”);

// System.out.println(“sss=” + sss);

// 允许请求头Token

// httpResponse.setHeader(“Access-Control-Allow-Headers”,"Origin,X-Requested-With,

// Content-Type, Accept, Token");

// System.out.println(“Token=” + req.getHeader(“Token”));

if (“OPTIONS”.equals(req.getMethod())) {// axios的ajax会发两次请求,第一次提交方式为:option,直接返回即可

return;

}

filterChain.doFilter(servletRequest, servletResponse);

}

@Override

public void destroy() {

}

}

五、axios 的 get/post 的区别( qs )

=================================

qs

qs.js它是一个url参数转化的js库。用法就两个:

var obj = qs.parse(‘a=b&c=d’);  //将URL解析成对象的形式:{a:‘b’,c:‘d’}

var str = qs.stringify(obj);    //将对象 序列化成URL的形式,以&进行拼接:a=b&c=d’

qs.stringify()将对象转换成字符串

http.js

/**

  • vue项目对axios的全局配置

*/

import axios from ‘axios’

import qs from ‘qs’

//引入action模块,并添加至axios的类属性urls上

import action from ‘@/api/action’

axios.urls = action

// axios默认配置

axios.defaults.timeout = 10000; // 超时时间

// axios.defaults.baseURL = ‘http://localhost:8080/j2ee15’; // 默认地址

axios.defaults.baseURL = action.SERVER;

//整理数据

// 只适用于 POST,PUT,PATCH,transformRequest` 允许在向服务器发送前,修改请求数据

axios.defaults.transformRequest = function(data) {

data = qs.stringify(data);

return data;

};

// 请求拦截器

axios.interceptors.request.use(function(config) {

// var jwt = window.vm.$store.getters.getJwt;

// config.headers[‘jwt’] = jwt;

return config;

}, function(error) {

return Promise.reject(error);

});

// 响应拦截器

axios.interceptors.response.use(function(response) {

// debugger;

// var jwt = response.headers[‘jwt’];

// if(jwt){

// window.vm.$store.commit(‘setJwt’,{jwt:jwt});

// }

return response;

}, function(error) {

return Promise.reject(error);

});

// // 路由请求拦截

// // http request 拦截器

// axios.interceptors.request.use(

// config => {

// //config.data = JSON.stringify(config.data);

// //config.headers[‘Content-Type’] = ‘application/json;charset=UTF-8’;

// //config.headers[‘Token’] = ‘abcxyz’;

// //判断是否存在ticket,如果存在的话,则每个http header都加上ticket

// // if (cookie.get(“token”)) {

// // //用户每次操作,都将cookie设置成2小时

// // cookie.set(“token”, cookie.get(“token”), 1 / 12)

// // cookie.set(“name”, cookie.get(“name”), 1 / 12)

// // config.headers.token = cookie.get(“token”);

// // config.headers.name = cookie.get(“name”);

// // }

// return config;

// },

// error => {

// return Promise.reject(error.response);

// });

// // 路由响应拦截

// // http response 拦截器

// axios.interceptors.response.use(

// response => {

// if (response.data.resultCode == “404”) {

// console.log(“response.data.resultCode是404”)

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
img

= cookie.get(“name”);

// // }

// return config;

// },

// error => {

// return Promise.reject(error.response);

// });

// // 路由响应拦截

// // http response 拦截器

// axios.interceptors.response.use(

// response => {

// if (response.data.resultCode == “404”) {

// console.log(“response.data.resultCode是404”)

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-49jvKwl9-1710890707801)]
[外链图片转存中…(img-w3l5hRNA-1710890707801)]
[外链图片转存中…(img-eXbnP0kY-1710890707802)]
[外链图片转存中…(img-DZ9S79VW-1710890707802)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
[外链图片转存中…(img-5XnjRH6j-1710890707802)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值