728x90
반응형
- 필요한 모듈을 가져옵니다. axios는 HTTP 요청을 보내는 데 사용되며, express는 웹 서버를 구축하는 데 사용됩니다. path 모듈은 파일 경로를 다루는 데 사용됩니다.
- CORS(Cross-Origin Resource Sharing) 헤더 설정: 이 설정은 다른 도메인에서의 리소스 접근을 허용합니다.
- 정적 파일 경로 설정: express.static() 미들웨어 함수를 이용해 정적 파일(HTML, CSS, JavaScript 등)이 있는 디렉토리 경로를 지정합니다.
- 라우팅 설정: 각 URL 요청에 대한 응답을 정의합니다. 예를 들어 /map.html 요청이 오면 "map.html" 파일을 응답으로 반환합니다.
- 서버 포트 설정 및 실행: 환경 변수 PORT 값 혹은 3000 포트에서 서버가 실행됩니다.
- 카카오 맵 정보 가져오기: '/getKakaoMapData' URL로 GET 요청이 오면 카카오 API에 좌표 정보(lat, lng)를 전달하고 결과 데이터를 받아서 클라이언트에게 반환합니다.
- 카카오 지도 스크립트 불러오기: '/loadKakaoScript' URL로 GET 요청이 오면 카카오 지도 API 스크립트 태그 문자열을 반환합니다.
sever.js 코드입니다!
const axios = require("axios");
const express = require("express");
const app = express();
const path = require("path");
// CORS 헤더 설정
app.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept"
);
res.setHeader(
"Access-Control-Allow-Methods",
"GET, POST, PATCH, DELETE, OPTIONS"
);
next();
});
// 정적 파일 경로 설정
app.use(express.static(path.join(__dirname, "..")));
// 라우팅 설정
app.get("/", (req, res) => {
res.sendFile(path.join(__dirname, "..", "html", "index.html"));
});
app.get("/map.html", (req, res) => {
res.sendFile(path.join(__dirname, "..", "html", "map.html"));
});
app.get("/buildingData.js", (req, res) => {
res.sendFile(path.join(__dirname, "..", "js", "data", "buildingData.js"));
});
app.get("/news.html", (req, res) => {
res.sendFile(path.join(__dirname, "..", "html", "news.html"));
});
app.get("/newsData.js", (req, res) => {
res.sendFile(path.join(__dirname, "..", "js", "data", "newsData.js"));
});
app.get("/notice.html", (req, res) => {
res.sendFile(path.join(__dirname, "..", "html", "notice.html"));
});
app.get("/noticeData.js", (req, res) => {
res.sendFile(path.join(__dirname, "..", "js", "data", "noticeData.js"));
});
// 서버 포트 설정
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
// 카카오 맵 정보 가져오기
app.get("/getKakaoMapData", async (req, res) => {
const { lat, lng } = req.query;
try {
const response = await axios.get(
`https://dapi.kakao.com/v2/local/geo/coord2address.json?x=${lng}&y=${lat}`,
{
headers: {
Authorization: `KakaoAK ${process.env.KAKAO_API_KEY}`,
},
},
);
res.json(response.data);
} catch (error) {
console.error(error);
res.status(500).json({ error: "서버 오류 발생" });
}
});
// 카카오 지도 스크립트 불러오기
app.get("/loadKakaoScript", (req, res) => {
res.set("Content-Type", "text/javascript");
res.send(
`document.write('<script src="https://dapi.kakao.com/v2/maps/sdk.js?appkey=${process.env.KAKAO_API_KEY}&libraries=services,clusterer"><\\/script>');`,
);
});
728x90
반응형
'Project > 순살 아파트' 카테고리의 다른 글
순살 아파트) 완성 사이트 (0) | 2023.08.27 |
---|---|
순살 아파트) 사이트 배포 (0) | 2023.08.27 |
순살 아파트) notice.html (0) | 2023.08.27 |
순살 아파트) news.html (0) | 2023.08.27 |
순살 아파트) map.html 코드 (0) | 2023.08.27 |