Spring Boot+Vue 전단 분리 개발 전단 네트워크 패키지 및 설정 요청
axios 도입
axios 사용 절 차 는 매우 간단 합 니 다.우선 전단 항목 에 axios 를 도입 합 니 다.
npm install axios -S
포장 을 한 후에 이치 대로 말 하면 직접 사용 할 수 있 지만 일반적으로 생산 환경 에서 우 리 는 네트워크 요청 에 대해 포장 을 해 야 한다.네트워크 요청 이 잘못 될 수 있 기 때문에 이러한 오 류 는 코드 오류 로 인 한 것 도 있 고 업무 오류 도 있 습 니 다.어떤 오류 든 개발 자가 처리 해 야 합 니 다.우 리 는 요청 을 보 낼 때마다 각종 오 류 를 매 거 할 수 없습니다.
따라서 우 리 는 전단 요청 에 대해 패 키 징 을 해 야 합 니 다.패 키 징 이 완 료 된 후에 전단 오 류 를 통일 적 으로 처리 해 야 합 니 다.그러면 개발 자 는 매번 요청 을 보 내 는 곳 에서 요청 이 성공 한 경우 만 처리 하면 됩 니 다.
패키지 요청
axios 에서,우 리 는 axios 자체 테이프 의 차단 기 를 사용 하여 오류 에 대한 통 일 된 처 리 를 실현 할 수 있다.
axios 에 서 는 요청 차단기 도 있 고 응답 차단기 도 있 습 니 다.
요청 차단기 에 서 는 단일 로그 인 에서 전단 에 token 파 라 메 터 를 통일 적 으로 추가 할 수 있 습 니 다.
응답 차단 기 는 오류 에 대한 통 일 된 처 리 를 실현 할 수 있다.
또 다른 주의해 야 할 점 은 잘못된 디 스 플레이 는 페이지 와 연결 되 지 않 고 일반적인 방식 을 사용 해 야 한 다 는 점 입 니 다.(예 를 들 어 로그 인 에 실 패 했 습 니 다.사용자 이름/비밀번호 입력 상자 뒤에 오류 정 보 를 보 여 주 는 것 은 지원 되 지 않 습 니 다.이러한 오류 디 스 플레이 방식 은 지원 되 지 않 습 니 다)Element UI 의 Massage 로 오류 정 보 를 보 여 주 는 것 을 추천 합 니 다.이것 은 페이지 와 무관 한 구성 요소 입 니 다.
봉 인 된 axios 는 다음 과 같 습 니 다:
import axios from 'axios'
import {Message} from 'element-ui'
axios.interceptors.request.use(config => {
return config;
}, err => {
Message.error({message: ' !'});
})
axios.interceptors.response.use(data => {
if (data.status && data.status == 200 && data.data.status == 500) {
Message.error({message: data.data.msg});
return;
}
if (data.data.msg) {
Message.success({message: data.data.msg});
}
return data.data;
}, err => {
if (err.response.status == 504 || err.response.status == 404) {
Message.error({message: ' ⊙n⊙∥'});
} else if (err.response.status == 403) {
Message.error({message: ' , !'});
} else if (err.response.status == 401) {
Message.error({message: err.response.data.msg});
} else {
if (err.response.data.msg) {
Message.error({message: err.response.data.msg});
}else{
Message.error({message: ' !'});
}
}
})
코드 설명:1.우선 axios 와 Massage 구성 요 소 를 가 져 옵 니 다.
2.다음 요청 차단 기 를 정의 합 니 다.
3.마지막 으로 응답 차단 기 를 정의 합 니 다.이 차단 기 는 두 개의 매개 변수 가 있 습 니 다.첫 번 째 매개 변 수 는 데이터 가 서버 처리 에 성공 한 응답 을 표시 하고 두 번 째 err 는 서버 처리 에 실패 한 응답 을 표시 합 니 다.jQuery 의 Ajax 를 대조 하면 첫 번 째 는 success 리 셋 에 해당 하고 두 번 째 는 error 리 셋 에 해당 합 니 다.
4.응답 한 data 는 서버 에서 돌아 온 데 이 터 를 표시 합 니 다.데이터 형식 은{data:{status:200,msg",obj:{},status:200}입 니 다.data 의 대상 은 서버 에서 돌아 온 구체 적 인 JSON 입 니 다.밖의 status 는 HTTP 응답 코드 를 표시 합 니 다.안쪽 status 는 사용자 정의 RespBean 에서 돌아 온 데이터 입 니 다.
5.먼저 HTTP 응답 코드 를 200 으로 판단 하고 서버 에서 되 돌아 오 는 status 는 500 으로 업무 논리 적 오 류 를 나타 낸다.이때 Message 를 통 해 오류 정 보 를 직접 보 여주 고 return 하면 된다.
6.서버 에서 돌아 오 는 필드 에 msg 가 포함 되 어 있 으 면 msg 를 표시 합 니 다.이 msg 는 일반적으로 성공 적 인 알림 입 니 다.
7.마지막 으로 data.data 를 되 돌려 줍 니 다.서버 에서 돌아 올 데이터 return 입 니 다.이 데 이 터 는 최종 적 으로 호출 을 요청 하 는 곳 에 옵 니 다.
8.HTTP 응답 코드 가 400 보다 크 면 err 에 들 어 갑 니 다.
방법 포장
패키지 요청 이 완료 되면 방법 을 패키지 해 야 합 니 다.호출 이 편리 합 니 다.
let base = '';
export const postRequest = (url, params) => {
return axios({
method: 'post',
url: `${base}${url}`,
data: params,
headers: {
'Content-Type': 'application/json'
}
});
}
export const putRequest = (url, params) => {
return axios({
method: 'put',
url: `${base}${url}`,
data: params,
headers: {
'Content-Type': 'application/json'
}
});
}
export const deleteRequest = (url) => {
return axios({
method: 'delete',
url: `${base}${url}`
});
}
export const getRequest = (url) => {
return axios({
method: 'get',
url: `${base}${url}`
});
}
앞 뒤 분리 항목 에서 백 엔 드 인 터 페 이 스 는 대부분 RESTful 스타일 로 디자인 되 기 때문에 전단 은 주로 GET\POST\PUT\DELETE 방법 을 패키지 한 다음 에 모든 요청 매개 변 수 는 JSON 을 사용 합 니 다.처음에 base 변 수 를 정 의 했 습 니 다.이것 은 요청 한 접두사 입 니 다.나중에 유지 하기 편리 합 니 다.(요청 접 두 사 를 통일 적 으로 수정 해 야 한다 면)
Vue 플러그 인 만 들 기
봉 인 된 방법 은 이미 직접 사용 할 수 있 지만,비교적 번 거 롭 습 니 다.사용 할 때마다 관련 vue 파일 에 방법 을 도입 해 야 합 니 다.아래 와 같이:
import {postRequest} from "../utils/api";
그러나 이런 조작 방식 은 너무 번 거 롭 기 때문에 우 리 는 방법 을 Vue 의 플러그 인 으로 더 봉인 하 는 것 을 고려 할 수 있다.이렇게 하면 모든 vue 파일 에서 방법 을 도입 하지 않 아 도 직접 호출 할 수 있다.Vue 공식 문서 참조https://cn.vuejs.org/v2/guide/plugins.html다음 과 같 습 니 다.
공식 적 으로 5 가지 플러그 인 제작 방식 을 제 시 했 는데,우 리 는 여기 서 네 번 째 방안 을 채택 했다.
구체 적 인 조작 은 main.js 에서 모든 패 키 징 방법 을 도입 한 다음 Vue.prototype 에 마 운 트 하면 됩 니 다.다음 과 같 습 니 다.
import {postRequest} from "./utils/api";
import {putRequest} from "./utils/api";
import {deleteRequest} from "./utils/api";
import {getRequest} from "./utils/api";
Vue.prototype.getRequest = getRequest;
Vue.prototype.deleteRequest = deleteRequest;
Vue.prototype.putRequest = putRequest;
Vue.prototype.postRequest = postRequest;
패키지 가 완 료 된 후 vue 파일 에서 this 를 통 해 네트워크 요청 방법의 인용 을 직접 얻 을 수 있 습 니 다.다음 과 같 습 니 다.
this.postRequest("/doLogin", this.user).then(msg=>{
if (msg) {
// ,
}
})
then 의 msg 는 응답 차단기 에서 돌아 오 는 msg 입 니 다.이 msg 는 값 이 없 으 면 요청 이 실 패 했 음 을 표시 합 니 다.(실 패 는 차단기 에서 처리 되 었 습 니 다)값 이 있 으 면 요청 이 성공 했다 는 것 을 의미 합 니 다!전송 요청 설정
앞 뒤 분리 에서 전단 과 백 엔 드 는 서로 다른 포트 나 주소 에서 실 행 됩 니 다.전단 이 백 엔 드 에 직접 요청 을 보 내 면 이 요청 은 도 메 인 을 뛰 어 넘 습 니 다.
그러나 프로젝트 배 치 를 할 때 전단 을 압축 하여 컴 파일 한 후 자바 프로젝트 에 복사 하여 자바 프로젝트 와 함께 실행 합 니 다.이 때 크로스 필드 문제 가 존재 하지 않 습 니 다.
그래서 여기 서 우리 의 해결 방향 은 크로스 도 메 인 문 제 를 해결 하 는 것 이 아니 라 NodeJS 의 요청 퍼 가기 설정 을 통 해 네트워크 요청 이 순조롭게 전송 되도록 하 는 것 입 니 다.
vue 프로젝트 의 config/index.js 파일 에 전송 요청:
전송 요청 설정 을 추가 한 후 전단 항목 을 다시 시작 해 야 유효 합 니 다.
이 때 전단 항목 을 시작 하면 네트워크 요청 을 순조롭게 보 낼 수 있 습 니 다.
총결산
본 고 는 주로 앞 뒤 가 분 리 된 상황 에서 전단 네트워크 요청 을 어떻게 봉인 하고 전송 요청 을 어떻게 설정 하 는 지 여러분 과 공유 하 였 습 니 다.이것 은 앞 뒤 가 분 리 된 기초 과정 입 니 다.어린이 들 은 질문 이 있 으 면 댓 글 토론 을 환영 합 니 다.송 형 은 자신 이 봉 인 된 네트워크 요청 라 이브 러 리 를 GitHub 에 올 려 놓 았 습 니 다.참고 하 시기 바 랍 니 다https://github.com/lenve/javaboy-code-samples
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.