서버에서는 라우팅을 통해서 클라이언트와 통신의 인터페이스를 제공해준다.
const express = require('express')
const app = express()
위와 같이 적은 후 app.post() 등의 함수를 작성할 수 있다.
-간단한 웹서버 만들기-
const express = require('express')
const app = express()
const port = 3000
app.get('/',(req,res)=>{
res.status(200).send('hello world')
})
app.listen(port, ()=>{
console.log('Example app listening at http://localhost:${port}')
})
; 요청에 필요한 기능을 더하거나, 문제가 발견된 곳을 걷어내는 역할
; express의 큰 장점이라고 할 수 있다.
미들웨어를 자주 사용하는 상황
-기존 Node.js Buffer
let body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
// body 변수에는 문자열 형태로 payload가 담겨져 있습니다.
});
body-parser 사용
const bodyParser = require('body-parser')
const jsonParser = bodyParser.json()
// 생략
app.post('/api/users', jsonParser, function (req, res) {
// req.body에는 JSON의 형태로 payload가 담겨져 있습니다.
})
});
기존 - writeHead,end 메소드를 사용
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를 사용하면 간편하게 할 수 있다.
1. 모든 요청/응답에 CORS헤더를 붙일 때
const cors = require('cors')
app.use(cors())
2. 특정 메소드에만 붙일 때
const cors = require('cors')
app.get('/products/:id', cors(), function (req, res, next) {
res.json({msg: 'This is CORS-enabled for a Single Route'})
})
const express = require('express');
const app = express();
const port = 3000;
const cors = require('cors');
let myLogger = (req, res, next) => {
console.log(`http request method is ${req.method}, url is ${req.url}`);
next();
};
app.use(myLogger);
app.use(cors());
app.get('/', (req, res) => {
res.status(200).send('hello world');
});
app.listen(port, () => {
console.log(`this app listening at http://localhost${port}`);
});
http 요청에서 토큰이 있으면 함수를 실행, 아닐경우엔 에러를 보내는 미들웨어
app.use((req, res, next) => {
// 토큰이 있는 경우만 받아준다.
if(req.headers.token){
req.isLoggedIn = true;
next()
} else {
res.status(400).send('invalid user')
}
})