From c1e4cb20f7ed4cdeee88456766b6a5c9195a811b Mon Sep 17 00:00:00 2001 From: leegeunhyeok Date: Mon, 20 Jan 2020 16:24:30 +0900 Subject: [PATCH] FIXED #10: Add _makeUrl to core.js(school.js _makeUrl removed) for request to same domain --- school.js | 30 ++++++++++-------------------- src/core/index.js | 31 ++++++++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 23 deletions(-) diff --git a/school.js b/school.js index 1129b32..3a77a34 100644 --- a/school.js +++ b/school.js @@ -22,11 +22,11 @@ class School { * @constructor */ constructor () { - this._request = new core.RequestManager(); // HTTP 요청 관리 객체 - this._data = data; // 데이터 정의 객체 - this._searchUrl = data.searchUrl; // 검색 URL End-point - this._mealUrl = data.mealUrl; // 급식 URL End-point - this._calendarUrl = data.calendarUrl; // 학사일정 URL End-point + this._requestManager = new core.RequestManager(); // HTTP 요청 관리 객체 + this._data = data; // 데이터 정의 객체 + this._searchUrl = data.searchUrl; // 검색 URL End-point + this._mealUrl = data.mealUrl; // 급식 URL End-point + this._calendarUrl = data.calendarUrl; // 학사일정 URL End-point this._schoolType = null; // init한 교육기관 유형 심볼 값 this._schoolRegion = null; // init한 지역별 교육청 주소 심볼 값 @@ -44,16 +44,6 @@ class School { } } - /** - * 해당 지역 교육청의 요청 URL를 생성하여 반환합니다. - * @param {Symbol} region 교육청 관할 지역 심볼 - * @param {string} endPoint 데이터 수집 End-Point - */ - _makeUrl (region, endPoint) { - const host = this._data.REGION[region]; - return `https://${host}/${endPoint}`; - } - /** * 월을 확인하여 학기에 맞춰 년도를 변환합니다. * 3월~내년 2월까지 1학기로 구분하므로 2020년 1월 조회시 2019년 1월로 조회해야함 @@ -83,6 +73,7 @@ class School { this._schoolRegion = region; this._schoolCode = schoolCode; this._init = true; + this._requestManager.setRegion(region); } /** @@ -99,7 +90,8 @@ class School { throw new Error('검색할 학교명을 확인해주세요'); } - return this._request.post(this._makeUrl(region, this._searchUrl), { + this._requestManager.setRegion(region); + return this._requestManager.post(this._searchUrl, { kraOrgNm: name }) .then(({ data }) => { @@ -149,8 +141,7 @@ class School { const schulCrseScCode = this._data.EDUTYPE[this._schoolType].toString(); const schulKndScCode = '0' + schulCrseScCode; - const mealRequestUrl = this._makeUrl(this._schoolRegion, this._mealUrl); - return this._request.post(mealRequestUrl, { + return this._requestManager.post(this._mealUrl, { ay: util.paddingNumber(this._getSemesterYear(year, month)), mm: util.paddingNumber(month, 2), schulCode: this._schoolCode, @@ -248,10 +239,9 @@ class School { // 요청을 위한 파라미터 및 URL const schulCrseScCode = this._data.EDUTYPE[this._schoolType].toString(); const schulKndScCode = '0' + schulCrseScCode; - const calendarRequestUrl = this._makeUrl(this._schoolRegion, this._calendarUrl); // 학사일정 데이터 요청 - return this._request.post(calendarRequestUrl, { + return this._requestManager.post(this._calendarUrl, { ay: util.paddingNumber(this._getSemesterYear(year, month)), mm: util.paddingNumber(month, 2), schulCode: this._schoolCode, diff --git a/src/core/index.js b/src/core/index.js index e199c74..7d546d8 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -3,9 +3,17 @@ */ import axios from 'axios' +import Data from '../../data'; +const { data } = Data; class RequestManager { constructor () { + // 교육청 교육청 관할 지역 + this._region = null; + + // 데이터 + this._data = data; + // 세션 ID this._sid = null; @@ -16,6 +24,14 @@ class RequestManager { this._expiresTime = 1000 * 60 * 30; } + /** + * 교육청 관할 지역 심볼 설정 + * @param {Symbol} region 교육청 관할 지역 심볼 + */ + setRegion (region) { + this._region = region; + } + /** * HTTP GET 요청 * @param {string} url 요청 URL @@ -25,7 +41,7 @@ class RequestManager { get (url, config) { return this._prepare() .then(() => { - return axios.get(url, config); + return axios.get(this._makeUrl(url), config); }); } @@ -38,10 +54,19 @@ class RequestManager { post (url, config) { return this._prepare() .then(() => { - return axios.post(url, config); + return axios.post(this._makeUrl(url), config); }); } + /** + * 해당 지역 교육청의 요청 URL를 생성하여 반환합니다. + * @param {string} endPoint 데이터 수집 End-Point + */ + _makeUrl (endPoint) { + const host = this._data.REGION[this._region]; + return `https://${host}/${endPoint}`; + } + /** * 요청 전 세션 확인 진행 * @returns {Promise} @@ -68,7 +93,7 @@ class RequestManager { */ _reload () { // 메인 페이지로 접속하여 세션 갱신 - return axios.get('https://stu.goe.go.kr/edusys.jsp?page=sts_m40000') + return axios.get(this._makeUrl(this._data.mainUrl)) .then(res => { // 쿠키에서 세션 ID 추출 const sid = res.headers['set-cookie']