참고사항
MERN stack: JavaScript 생태계에서 인기 있는 프레임워크인 MongoDB, Express, React, Node.js를 지칭
터미널에서 해당 코드를 작성하면 express가 설치됨
npm install express
app.get()
: 경로('/'
)에 HTTP GET 요청이 있을 때마다 호출되는 콜백 함수send()
를 호출하여 문자열 "Hello World!"를 반환함//1.
const express = require('express') // (1)
const app = express() //(2)
const port = 3000 //(3)
//2.
app.get('/', (req, res) => { // (1)
res.send('Hello World!') // (2)
})
//3.
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
}) //(1)
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('Hello World!')
})
// 새로 추가된 코드
const wiki = require('./wiki.js')
app.use('/wiki', wiki) //wiki.js의 경로에 모두 '/wiki'가 있는 것으로 간주
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
// wiki.js - Wiki route module
const express = require('express')
const router = express.Router()
// Home page route
router.get('/', (req, res) => { // '/wiki' 와 동일한 의미
res.send('HomePage');
})
// About page route
router.get('/about', (req, res) => { // '/wiki/about'과 동일한 의미
res.send('AboutPage');
})
module.exports = router
let body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
// body 변수에는 문자열 형태로 payload가 담겨져 있습니다.
});
const jsonParser = express.json();
// 생략
app.post('/api/users', jsonParser, function (req, res) {
})
{strict: false}
추가하기const jsonParser = express.json({strict: false});
// 생략
app.post('/api/users', jsonParser, function (req, res) {
})
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()
}
npm install cors //터미널에 입력하기
const cors = require('cors');
// 생략
app.use(cors());
const cors = require('cors')
// 생략
app.get('/products/:id', cors(), function (req, res, next) {
res.json({msg: 'This is CORS-enabled for a Single Route'})
})
ex. 미들웨어 로거(logger): 디버깅이나, 서버 관리에 도움이 되기 위해 console.log
로 적절한 데이터나 정보를 출력함
데이터가 여러 미들웨어를 거치는 동안 응답할 결과를 만들어야 한다면, 미들웨어 사이사이에 로거를 삽입하여 현재 데이터를 확인하거나, 디버깅에 사용
endpoint가 /
이면서, 클라이언트로부터 GET
요청을 받았을 때 적용되는 미들웨어
파라미터의 순서에 유의
req
: 요청(request)res
: 응답(response)next
: 다음 미들웨어를 실행use 메서드로 모든 요청에 대하여 미들웨어를 적용하기
const express = require('express');
const app = express();
const myLogger = function (req, res, next) {
console.log('LOGGED');
next();
};
app.use(myLogger);
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(3000);
const express = require('express');
const app = express();
const myLogger = function (req, res, next) {
//req를 활용합니다.
next();
};
app.use(myLogger);
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(3000);
ex. HTTP 요청에서 토큰이 있는지를 판단하여, 이미 로그인한 사용자일 경우 성공, 아닐 경우 에러를 보내는 경우
app.use((req, res, next) => {
// 토큰이 있는지 확인, 없으면 받아줄 수 없음.
if(req.headers.token){
req.isLoggedIn = true;
next();
} else {
res.status(400).send('invalid user')
}
})