수정하고자하는 텍스트를 더블 클릭하고 커맨드 d 를 눌르면 다 선택된다 그리고 수정하면 끝!
npm install expressconst express = require('express')를 썼다.npm install body-parserconst 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)중에서 reqfunction안에 있는 (req, res, next)중에서 resfunction안에 있는 (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')
}
})