ES6 module 형태로 코드를 변경합니다.
webpack,parcel과 같은 번들러를 사용하지 말아주세요.- 해당 코드 실행을 위해서는
http-server모듈을(로컬 서버를 띄우는 다른 모듈도 사용 가능) 통해index.html을 띄워야 합니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<link rel="stylesheet" href="src/style.css" />
<title>Cat Search</title>
</head>
<body>
<main id="App"></main>
**<script type="module" src="src/main.js"></script>**
</body>
</html>
main.js type을 module이라고 지정한다.import , export를 시켜야 함.
아무 컴포넌트를 import 받을 수 있는게 아닌, export 된 module만 받을 수 있다.class App {
//...생략
}
**export default App;**
**import App from './App.js';**
new App(document.querySelector("#App"));
import Loading from "./Loading.js";
import DarkmodeToggle from "./DarkmodeToggle.js";
import SearchInput from "./SearchInput.js";
import SearchResult from "./SearchResult.js";
import ImageInfo from "./ImageInfo.js";
const config = {
API_ENDPOINT : "<http://localhost:4001>",
}
export default config;
const msg = {
REQUEST_ERROR : {
'500' : { msg : '요청실패' },
}
}
export default msg;
**import config from './config.js';
import msg from './msg.js';
const { API_ENDPOINT } = config;
const { REQUEST_ERROR } = msg;**
const request = async(url) => {
try{
const result = await fetch(url);
// console.dir(result.status);
if(result.status === 200){
return result.json();
}else{
throw REQUEST_ERROR[result.status];
}
}catch(err){
console.log(err);
alert(err.msg);
return {
data : null,
}
}
}
const api = {
fetchCats: keyword => {
return request(`${API_ENDPOINT}/api/cats/search?q=${keyword}`);
},
fetchCatsPage: (keyword, page) => {
return request(`${API_ENDPOINT}/api/cats/search?q=${keyword}&page=${page}`);
},
fetchRandomCats : () => {
return request(`${API_ENDPOINT}/api/cats/random50`);
},
fetchCatDetail: id => {
return request(`${API_ENDPOINT}/api/cats/${id}`);
},
};
export default api;
uniqueArray라는 메소드를 만들어서 중복제거. 외부 파일로 추가한다.