수정하고자하는 텍스트를 더블 클릭하고 커맨드 d 를 눌르면 다 선택된다 그리고 수정하면 끝!
npm install express
const express = require('express')
를 썼다.npm install body-parser
const jsonParser = bodyParser.json()
npm install cors
-> const cors = require('cors')
모든 req, res에 cors 헤더를 붙일 때const requestHandler = (req, res) => {
if(req.url === '/lower') {
if (req.method === 'GET') {
res.end(data)
} else if (req.method === 'POST') {
req.on('data', (req, res) => {
// do something ...
})
}
}
}
const router = express.Router()
router.get('/lower', (req, res) =>{
res.send(data)
})
router.post('/lower', (req, res) =>{
// do something
})
<!-- Express의 라우터로 구현한 Mini Node Server -->
미들웨어를 사용하는 상황
순수 node.js로 HTTP body(payload)를 받을 때에는 Buffer를 조합해서 다소 복잡한 방식으로 body를 얻을 수 있다.
let body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
// body 변수에는 문자열 형태로 payload가 담겨져 있습니다.
});
//네트워크상의 chunk를 합치고, buffer를 body로 변환하는 작업이 필요
https://github.com/expressjs/body-parser (body-parser 미들웨어)를 이용하면 이 과정을 간단하게 처리할 수 있다.
const bodyParser = require('body-parser')
const jsonParser = bodyParser.json()
// 생략
app.post('/api/users', jsonParser, function (req, res) {
// req.body에는 JSON의 형태로 payload가 담겨져 있습니다.
})
// bodyParser를 이용해 요청받은 데이터를 json형태로 변환한다.
순수 node.js 코드에 CORS 헤더를 붙이려면, 응답 객체의 writeHead 메소드 등을 이용한다. 이런 메소드를 이용하더라도, Access-Control-Allow-*
를 매번 재정의 할 뿐만 아니라, OPTIONS
메소드에 대한 라우팅도 따로 구현해야한다.
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()
}
순수 node.js에 CORS 를 적용하는 코드
const cors = require('cors')
// 생략
app.use(cors()) // 모든 요청에 대해 CORS 허용
// cors 모듈을 이용해 CORS를 간단하게 처리할 수 있다.
const cors = require('cors')
// 생략
// 특정 요청에 대해 CORS 허용
app.get('/product/:id', cors(), function(req, res, next) {
res.json({msg: 'This is CORS-enabled for a Single Route'})
})
const express = require('express')
const app = express();
app.get('/', function(req, res, next) {
next();
})
app.listen(3000);
get
'/'
function()
function안에 있는 (req, res, next)
중에서 req
function안에 있는 (req, res, next)
중에서 res
function안에 있는 (req, res, next)
중에서 next
위 코드는 endpoint가
/
면서, 클라이언트로부터GET
요청을 받았을 때 적용되는 미들웨어다.
parameter순서에 유의해야한다.req, res
는요청request
,응답response
이고,next
는 다음 미들웨어를 실행한다. 코드에서는 미들웨어 내부에서는 아무런 작업을 하고 있지 않다. 그저next()
함수를 호출하여 다음 미들웨어로 데이터를 전달하고 있다.
app.use
를 사용한다.app.use
method로 모든 요청에 대하여 미들웨어를 적용하는 코드const express = require('express');
const app = express();
const myLogger = function (req, res, next) {
console.log('LOGGED'); // 이 부분을 req, res 객체를 이용해 고치면, 여러분들은 모든 요청에 대한 로그를 찍을 수 있다. 아래에 작성하겠다.
console.log(`http request method is ${req.method}, url is ${req.url} `);
next();
};
app.use(myLogger);
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(3000);
http request method is GET, url is /
이렇게 나온다.app.use((req, res, next) => {
// 토큰 있는가? 없음 reject
if(req.headers.token){
req.isLoggedIn = true;
next()
} else {
res.status(400).send('invalid user')
}
})