2022.06.17(Fri)
[TIL] Day37
[SEB FE] Day37
Node.js ํ๊ฒฝ์์ ์น ์๋ฒ ๋๋ API ์๋ฒ ์ ์์ ์ํด ์ฌ์ฉ๋๋ ์ธ๊ธฐ ํ๋ ์์ํฌ
1. ๋ฏธ๋ค์จ์ด ์ถ๊ฐ ๊ฐ๋ฅ
2. Router ์ ๊ณต
// express install
npm install express
const express = require('express')
const app = express();
const port = 3000;
// ๋ฃจํธ URL(/)์ ๋ํ ์์ฒญ์ ๋ํ ์๋ต: 'Hello World!'
// ๋ค๋ฅธ ๋ชจ๋ ๊ฒฝ๋ก๋ 404 Not Found๋ก ์๋ต
app.get('/', (req, res) => {
res.send('Hello World!');
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
๋ฉ์๋์ URL๋ก ๋ถ๊ธฐ์ ์ ๋ง๋๋ ๊ฒ
โ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ํด๋นํ๋ Endpoint์ ๋ฐ๋ผ ์๋ฒ๊ฐ ์๋ตํ๋ ๋ฐฉ๋ฒ ๊ฒฐ์
const router = express.Router();
router.get('/lower', (req, res) => {
res.send(data);
})
router.post('/lower', (req, res) => {
~~~
})
ํ๋ก์ธ์ค ์ค๊ฐ์ ๊ด์ฌํ์ฌ ํน์ ์ญํ ์ํ
POST ์์ฒญ ๋ฑ์ ํฌํจ๋ body(payload)๋ฅผ ๊ตฌ์กฐํํ ๋
// Node.js
let body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
// body ๋ณ์์ ๋ฌธ์์ด ํํ์ payload(body)๊ฐ ๋ด๊ฒจ์ ธ ์์
body = Buffer.concat(body).toString();
});
// body-parse middleware๋ก ์์ ๊ณผ์ ์ ๊ฐ๋จํ ๊ตฌํ ๊ฐ๋ฅ
npm install body-parser
const bodyParser = require('body-parser');
const jsonParser = bodyParser.json();
app.post('/users', jsonParser, function (req, res) {
~~~
})
// Express v4.16.0๋ถํด ๋ฐ๋ก body-parser ์ค์น x
// Express ๋ด์ฅ middleware์ธ express.json() ์ฌ์ฉ
const jsonParser = express.json();
app.post('/users', jsonParser, function (req, res) {
~~~
})
๋ชจ๋ ์์ฒญ/์๋ต์ CORS ํค๋๋ฅผ ๋ถ์ฌ์ผ ํ ๋
// Node.js
const defaultCorsHeader = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type, Accept',
'Access-Control-Max-Age': 10
};
if (req.method === 'OPTIONS') {
res.writeHead(201, defaultCorsHeader);
res.end()
}
// cors middleware๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ๊ณผ์ ์ ๊ฐ๋จํ ๊ตฌํ
npm install cors
const cors = require('cors');
// ๋ชจ๋ ์์ฒญ์ ๋ํ CORS ํ์ฉ
app.use(cors());
// ํน์ ์์ฒญ์ ๋ํ CORS ํ์ฉ
app.get('/products/:id', cors(), function (req, res, next) {
res.json({msg: 'This is CORS'})
})
๋ชจ๋ ์์ฒญ์ ๋ํด URL์ด๋ ๋ฉ์๋๋ฅผ ํ์ธํ ๋
const express = require('express');
const app = express();
const myLogger = function (req, res, next) {
next();
};
// function(): middleware function
// req: ๋ฏธ๋ค์จ์ด ํจ์์ ๋ํ HTTP ์์ฒญ ์ธ์
// res: ๋ฏธ๋ค์จ์ด ํจ์์ ๋ํ HTTP ์๋ต ์ธ์
// next: ๋ฏธ๋ค์จ์ด ํจ์์ ๋ํ ์ฝ๋ฐฑ ์ธ์ => ๋ค์ ๋ฏธ๋ค์จ์ด ์คํ ์ญํ
app.use(myLogger);
app.get('/', function (req, res) {
res.send('Hello World');
});
app.listen(3000);
์์ฒญ ํค๋์ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๋์ง ํ์ธํ ๋
app.use((req, res, next) => {
if(req.headers.token) { // ํ ํฐ์ด ์๋ค๋ฉด
req.isLoggedIn = true;
next();
} else { // ํ ํฐ์ด ์๋ค๋ฉด error ์ฒ๋ฆฌ
res.status(400).send('invalid user');
}
})
์ด์ Node.js๋ก๋ง ๊ตฌํํ ์ฝ๋ ๊ธธ์ด๋ ๊ฝค ๊ธธ์์๋๋ฐ ํ์คํ Express๋ฅผ ์ฌ์ฉํ๋๊น ๊น๊ผผํ๊ฒ ๋ช ์ค๋ง์ ๋ฆฌํฉํ ๋ง ๊ตฌํ ๋- ๐
// express๋ก refactoring
const express = require("express");
const http = require("http");
const app = express();
const cors = require("cors");
// ์์ ๋ฐ์ดํฐ ํํ๋ parsing ํด์ฃผ๋๋ก ์ค์ (๊ฐ์ฒด ํํ๊ฐ ์๋ String ํํ๋ ๋ฐ์ ์ ์๋๋ก ์ฒ๋ฆฌ)
const jsonParser = express.json({ strict: false });
const port = 4999;
app.use(cors());
app.get("/", (req, res) => {
res.send("Hello World!");
});
app.post("/upper", jsonParser, (req, res) => {
res.json(req.body.toUpperCase());
});
app.post("/lower", jsonParser, (req, res) => {
res.json(req.body.toLowerCase());
});
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
์ค๋ ํ์ด๋ถ๊ณผ ํจ๊ป StatesAirline Server๋ฅผ ๊ตฌํํ์ฌ ํญ๊ณตํธ ์กฐํ ๋ฐ ์์ฝ ์๋ฒ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
์์ง ๋๊น์ง ๊ตฌํํ์ง๋ ๋ชป ํด์ ์์์ ๋ง์ ๋ค ๊ตฌํํ๊ณ ์ข ๋ ์ดํดํ ๋ค์์ ๋ธ๋ก๊น ํ์ข
์ฒ์์ ์ง์ง ์ด๋ป๊ฒ ๊ตฌํํ ์ง ๋ ๋ง๋งํ๋๋ฐ ๊ฐ์ด ์๋ฌด๊ฑฐ๋ ๋๋ ค๋ฃ์ด๋ณด์ ๋ผ๋ ๋ง์ธ๋๋ก ์๊ฐํ๋๋ก ์ฝ๋ ๋๋ ค๋ฃ์ด์ ์ด์ฐ์ด์ฐ 10/13 testcase pass๐ซ
์์์ ๋ง์ ๋ชจ๋ testcase ํต๊ณผํ๊ธฐ!
๋ด์ผ๋ถํฐ ์ฃผ๋ง๋์ ์๋ฐ ์๊ฐ ์ ์ธํ๊ณ ์งฌ์งฌ์ด React๋ก CRUD ๊ตฌํํด๋ณด๊ธฐ! ์์ง ์ข ๋ง๋งํ์ง๋ง ์ผ๋จ ๋ญ๋ ์ ์ด๋ณด๋ฉด ์ด๋ป๊ฒ๋ ๊ตฌํ๋์ง ์์๊ฝ,,
์์ฆ ๋ด์ฉ์ด ์ด๋ ค์์ ธ์ ๋ฐ๋ผ๊ฐ๊ธฐ ๊ธ๊ธํ๋ฌ๊น.. ๊ทธ๋์ ๊ทธ๋ฐ์ง ์๊ฒ๋ ํ๊ธฐ์ซ๊ณ ์ถ์ถ ์ณ์ง๋ ๋๋ ๐ฅฒ