-
글쓴이글
-
2022년 5월 17일 10:22 #34208
조윤상참가자선생님
유가정보 API를 ejs에서 호출하는데 cors 문제가 있어서
server.js 에 아래 부분을 추가했는데도 같은 에러가 발생합니다.
------------------------------------------
const cors = require('cors');
const corsOptions = {
origin: "http://localhost:8080",
credentials: true
}app.use(cors(corsOptions));
-----------------------------------------
---------------------------------------------------------------
server.js 전체
const express = require('express');
const cors = require('cors');
const app = express();
const bodyParser= require('body-parser');
const corsOptions = {
origin: "http://localhost:8080",
credentials: true
}
app.use(cors(corsOptions));
app.use(express.json());
app.use(express.urlencoded({extended: true}));
app.use(bodyParser.urlencoded({extended: true}));
app.set(' engine', 'ejs');app.listen(8080, function(){
console.log('listening on 8080');
});app.get('/', function(req, res){
res.send();
res.render(__dirname + '/views/index.ejs');
});app.get('/main', function(req, res){
res.render(__dirname + '/views/main.ejs');
});---------------------------------------------------------------
main.ejs (api 호출 하는 부분)
..........................................생략
<h4>OPINET 유가</h4>
<div>
<table class="table">
<thead>
<tr>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div><div class="col-2"></div>
</div>
</body>
</html><script>
$().ready(function(){
//유가정보 가져오기
$("#addStopOver").click(function(){
fetch("http://www.opinet.co.kr/api/avgAllPrice.do?out=xml&code=F220512145")
.then(function(response){
console.log("111");
return response.json();
})
.then(function(myJson){
console.log("222");
console.log(JSON.stringify(myJson));
})
.catch(function(){
console.log("실패");
});})
});
</script>
에러 화면
2022년 5월 17일 14:44 #34226
codingapple키 마스터const cors = require('cors');
app.use(cors());
이것만 추가해봅시다
2022년 5월 17일 17:30 #34241
조윤상참가자여전히 안되서 크롬 확장 프로그램으로 임시적으로 막았어요,,
ejs파일에서 api 호출을 저렇게 해도 되나요??
server.js ----------------------------------------------
const express = require('express');
const cors = require('cors');
const app = express();
const bodyParser= require('body-parser');
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({extended: true}));
app.use(bodyParser.urlencoded({extended: true}));
app.set(' engine', 'ejs');app.listen(8080, function(){
console.log('listening on 8080');
});app.get('/', function(req, res){
res.render(__dirname + '/views/index.ejs');
});app.get('/main', function(req, res){
res.header("Access-Control-Allow-Origin", "*");
res.render(__dirname + '/views/main.ejs');
});----------------------------------------------------------------------
main.ejs -----------------------------------------------------------
<!DOCTYPE html>
<html>
<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="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
<style>
.form-control{
width : 50%;
display : inline;
}
</style>
<title>Document</title>
</head>
<body><h4 class="container mt-4"><strong>title</strong></h4>
<div class="container">
<div class="col-2"></div>
<div class="container mt-3">
<form>
<div class="form-group">
<label>출발지</label>
<input type="text" class="form-control">
</div>
<div id="stopOverAppendSpot" class="form-group">
<label>목적지</label>
<input type="text" class="form-control">
</div>
<button type="button" id="addStopOver" class="btn btn-outline-secondary">경유지 추가</button>
<button type="button" id="excel" class="btn btn-outline-secondary">Excel</button>
</form>
<br><br><br>
</div><h4 id="opinetInfo-title">오늘의 유가</h4>
<div>
<table class="table">
<thead>
<tr>
<th>유종</th>
<th>가격</th>
<th>차이</th>
</tr>
</thead>
<tbody class="opinetInfo-today">
</tbody>
</table>
</div><div class="col-2"></div>
</div></body>
</html><script>
let oilInfo;
let stopOverCnt = 0;$().ready(function(){
//유가정보 가져오기
var promise = new Promise(function(){
fetch("http://www.opinet.co.kr/api/avgAllPrice.do?out=json&code=F220512145", { dataType:'json',header : {'Content-Type': 'application/json', 'Accept': 'application/json'}})
.then(function(response){
return response.json();
})
.then(function(json){
oilInfo = json.RESULT.OIL;
var renderStr="";
document.getElementById("opinetInfo-title").innerHTML += '(' + oilInfo[0].TRADE_DT + ')';
for(var i = 0; i< 5; i++){
if(oilInfo[i].PRODNM == "실내등유") continue;renderStr += `<tr>
<td>${oilInfo[i].PRODNM}</td>
<td>${oilInfo[i].PRICE}</td>
<td>${oilInfo[i].DIFF}</td>
</tr>`
}
$(".opinetInfo-today").append(renderStr);})
.catch(function(){
console.log("error");
});
})$("#addStopOver").click(function(){
stopOverCnt++;
var appendStr = "";
appendStr += ` <div class="form-group">
<label>경유지${stopOverCnt}</label>
<input type="text" id="stopOver${stopOverCnt}"class="form-control" style="width:50%; display:inline">
<button type="button" id="remove()" class="btn btn-danger">삭제</button>
</div>`;$("#stopOverAppendSpot").before(appendStr);
function remove(){
console.log(this)
}
});
});</script>
---------------------------------------------------------------------------
2022년 5월 17일 20:11 #34253
codingapple키 마스터보니까 opinet이라는 곳으로 get요청이 막힌거네요
그건 opinet 서버개발자가 cors를 해제하거나 그래야합니다 get요청하는코드는 별문제없어보이는데요
-
글쓴이글
- 답변은 로그인 후 가능합니다.