Note

express로 nodejs 웹서버 만들기

zdiv 2023. 7. 30. 23:41

프로젝트 초기화

$ npm init -y

Express 설치

$ npm install express

웹서버 구현

const express = require('express')
const app = express()
const port = 3080

app.get('/', (req,res) => {
    res.send("안녕하세요?")
})

app.get('/data', (req,res) => {
    res.send("데이터 입니다")
})

app.listen(port, () => {
    console.log("서버가 실행됩니다.")
})

웹서버 구동

$ node index.js

라우팅

app.METHOD(PATH, HANDLER)

  • app : Express의 인스턴스
  • METHOD : HTTP 요청 메서드(GET, POST, PUT, DELETE 등)
  • PATH : 서버에서의 경로
  • HANDLER : 라우트(Route)가 일치할 때 실행되는 함수
    • 파라미터 req, res, next

 

콜백함수 사용 예

const ex0 = (req, res, next) => { 
  console.log('첫 번째 콜백 함수'); 
  next(); // 다음 콜백 함수 호출
};

const ex1 = (req, res, next) => { 
  console.log("두 번째 콜백 함수"); 
  next(); // 다음 콜백 함수 호출
};

const ex2 = (req, res, next) => { 
  res.send("세 번째 콜백 함수"); 
};

app.get('/example', [ex0, ex1, ex2]);

 

응답 메서드

res.download() 파일을 다운로드하도록 프롬프트
res.end() 응답 프로세스를 종료한다.
res.json() JSON 응답을 전송한다.
res.jsonp() JSONP 지원을 통해 JSON 응답을 전송한다.
res.redirect() 요청의 경로를 재지정해 준다.
res.render() 뷰(view) 템플릿을 렌더링 해준다.
res.send() 다양한 유형의 응답을 전송한다.
res.sendFile() 파일을 octet 스트림으로 전송한다.
res.sendStatus() 응답 상태 코드를 설정한 후 해당 코드를 응답 본문(body)에 담아서 전송한다.(404 Not Found 등)

 

app.route()

get, post, put과 같은 라우트 메서드를 한곳에 작성할 수 있다.

app.route('/customer')
  .get((req, res) => {
     res.send('고객 정보 조회');
})
.post((req, res) => {
  res.send('신규 고객 추가'); 
})
.put((req, res) => {
  res.send('고객 정보 수정');
})
.delete((req, res) => {
  res.send('고객 정보 삭제'); 
});

 

express.Router

라우트 처리를 여러 개의 파일로 분리해 구현이 가능하다.

routes/customer.js

const express = require("express"); 
const router = express.Router();

router
  .get("/", (req, res) => {
     res.send("고객 정보 조회"); 
  })
  .post("/insert", (req, res) => {
     res.send("신규 고객 추가"); 
  })
  .put("/update", (req, res) => {
     res.send("고객 정보 수정"); 
  })
  .delete("/delete", (req, res) => {
     res.send("고객 정보 삭제"); 
  });

routes/product.js

const express = require("express"); 
const router = express.Router();

router
  .get("/", (req, res) => {
     res.send("상품 정보 조회"); 
  })
  .post("/insert", (req, res) => {
     res.send("신규 상품 추가");
  })
  .put("/update", (req, res) => {
     res.send("상품 정보 수정"); 
  })
  .delete("/delete", (req, res) => {
     res.send("상품 정보 삭제"); 
  });

app.js

const express = require('express');
const customerRoute = require('./routes/customer'); 
const productRoute = require('./routes/product');  
const app = express();

app.use(express.json({
    limit: '50mb' // 최대 50메가
}));

app.listen(3000, () => {
    console.log('Server started. port 3000.');
})

app.use('/customer', customerRoute); 
app.use('/product', productRoute);

 

 에러처리

app.get('/example', (req, res) => {
    throw new Error('에러 발생'); 
});

 

app.get('/example', (req, res, next) => {
    next(new Error('에러 발생')); 
});

 

app.get('/example', (req, res, next) => {
    next(new Error('에러 발생'));
});

app.use((err, req, res, next) => {
    console.error(err);
    res.status(500).json({ statusCode: res.statusCode, errMessage: err.message });
});

 

정적파일 제공

app.use(express.static('public'));

 

app.use('/static', express.static('public'));

 

app.use('/static', express.static(__dirname + '/public'));

'Note' 카테고리의 다른 글

html에서 react 사용하기  (0) 2023.08.05
express + fetch + chart.js  (0) 2023.08.01
Bootstrap Collapse with Indicator  (0) 2023.07.23
Bootstrap Circle Badge  (0) 2023.07.23
Bootstrap Badge Color Extension  (1) 2023.07.23