nodejs 기반의 서버 구축을 할 때,
express 모듈을 사용하면 간편하고 쉽게 서버를 다룰 수 있다.
특히 express 사용은,
미들웨어와 라우터 처리가 용이하여 장점을 가진다.
이름 그대로 중간에서 무엇인가를 처리해주는 녀석이다
https://expressjs.com/ko/guide/using-middleware.html
**미들웨어 함수는 다음의 태스크를 수행할 수 있다.
**서버를 가동 및 각 method에 대한 요청,응답 처리
const express = require('express'); const cors = require('cors'); const app = express(); const bodyParser = require('body-parser'); const PORT = process.env.NODE_ENV === 'production' ? 3001: 3002 const fs = require('fs'); const defaultCorsHeaders = { '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 // Seconds. }; const headers = defaultCorsHeaders; app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.json()) //req.body에 대해서, chunk를 하나하나 쌓아서 data를 만들고 parse 할 필요 없이, 바로 req.body로 사용할 수 있게 해준다. app.use(cors()) //cors에 대한 모든 옵션을 허용하고 있다 app.options('/classes/messages', function(req, res){ res.header(headers); res.status(200); }); // 브라우저가 날린 options 요청에 대해서 응답할 수 있는 부분이다. 이 부분을 먼저 처리하여야 이 후 GET, POST, PUT, DELETE 등이 가능하게 된다. app.use('/', express.static('client')) app.get('/', function(req, res) { res.sendFile('index.html') }) //static을 사용해서, 어떤 html이나 js 파일 같은 정적인 것을 보여주고자 할 때, 어떤 path를 사용할 지 지정하였다. ('client') //그 후, get 요청에 대해서 pathname이 없는 경우, 기본적으로 'index.html'이라는 파일을 보내 보여주도록 하였다. app.post('/classes/messages', function(req, res) { let body = req.body; fs.readFile('./data.json', 'utf-8', function(err, data) { if(err) { throw err } let dataObject = JSON.parse(data); dataObject.results.push(body) fs.writeFile('./data.json', JSON.stringify(dataObject), 'utf-8', function(err) { if(err) {throw err} }) res.status(201).json(dataObject) }) }) //POST 요청의 '/classes/messages' pathname인 경우, 보내온 req.body를 'data.json'에 대하여 fs 모듈로 읽고 쓸 수 있게 하였다. //먼저 data.json의 내용을 parse한 뒤, 거기에 보내온 data를 push하고, 다시 data.json에 덮어쓰기하였다. //응답으로는 덮어쓰기가 완료된 data.json과 같은 내용을 가진 dataObject를 보내주었다.
Promise, Asynchronous, async & await - Javascript (0) | 2019.06.21 |
---|---|
Server Side Technics - Solo Sprint (0) | 2019.06.21 |
checkpoints 12 - module exports, setTimeOut, event loop (0) | 2019.06.19 |
Solo Sprint - Servers and Node (0) | 2019.06.18 |
Ajax with Fetch API - Javscript (0) | 2019.06.10 |
댓글 영역