useEffect(() => {
fetch('http://127.0.0.1:3001/api/todos')
.then((res) => {
return res.json();
})
.then(({ todos }) => {
setTodoList(() => todos.map((item) => <List value={item} key={uuidv1()} />));
});
}, []);
localhost:3000
localhost:3001
에서 실행중이다. port가 다르기 때문에 Same-origin policy를 위배한다. 따라서 Cross-Origin Resource Sharing을 해주기 위한 조치를 취해줘야 했다.
request 중 simple request
에 해당하는 상황이기 때문에 nodejs-express 서버측에서만 조치를 취해주면 됐다.
const express = require('express');
const router = express.Router();
const mysql = require('mysql2');
const allowOrigins = ['http://127.0.0.1:3000', 'http://localhost:3000'];
/* GET home page. */
router.get('/todos', function(req, res, next) {
const { origin } = req.headers;
if (allowOrigins.includes(origin)) {
res.setHeader('Access-control-allow-origin', origin);
}
let todos = [];
const connection = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_SCHEMA_TODOS,
});
connection.connect();
connection.query(
'SELECT * FROM todo_list',
async (err, results, fields) => {
if (err) throw err;
for (let i = 0; i < results.length; i++) {
const { todo, add_time } = results[i];
todos.push(todo);
}
res.send({ todos });
}
);
connection.end();
});
module.exports = router;
loading...
혹은 spinner gif 등)initdb.sql
파일에서 한글로 row들을 넣어주면 공백으로 들어간다.