[NodeJS] Express

seonjeong·2023년 5월 28일

NodeJS

목록 보기
4/19
post-thumbnail

🔥 Express란?

  • Node.js 웹 애플리케이션 프레임워크
  • Nodejs의 표준 웹서버 프레임워크로 불려질 만큼 많은 곳에서 사용하고 있음

    장점

    • 웹 애플리케이션을 만들기 위한 각종 라이브러리와 미들웨어 등이 내장돼 있어 개발하기 편리함
    • 수많은 개발자들에게 개발 규칙을 강제하여 코드 및 구조의 통일성을 향상시킴

🔥 사용하기

🧾 설치

디렉토리 생성후, 작업 디렉토리로 설정

mkdir 디렉토리명
cd 디렉토리명

pakage.json 파일 생성

npm init -y

express 설치

npm install express

🧾 실행하기

// server.js 작성
const express = require('express');
const app = express();	// Expres App 객체 -> 모든 서버의 일을 처리함

app.get('/', (req, res) => {
  res.send('Hello World!'); // 'Hello World!' 문자열 전송
});

app.listen(3000, () => {	// 3000 포트에서 요청 대기
  console.log(`Example app listening on port 3000`);
});

🧾 기본 라우팅

  • Routing : URI(또는 경로) 및 특정한 HTTP 요청 메소드(GET, POST 등)인 특정 엔드포인트에 대한 클라이언트 요청에 애플리케이션이 응답하는 방법을 결정하는 것
  • route는 하나 이상의 핸들러 함수를 가질 수 있으며, 이러한 함수는 라우트가 일치할 때 실행된다
// app -> express의 인스턴스
// METHOD -> HTTP 요청 메서드
// PATH -> 서버에서의 경로
// HANDLER -> 라우트가 일치할 때 실행되는 함수
app.METHOD(PATH, HANDLER)
  • 응답 메소드
메소드설명
res.download파일이 다운로드되도록 프롬프트.
res.end()응답 프로세스를 종료
res.json()JSON 응답을 전송
res.jsonp()JSONP 지원을 통해 JSON 응답을 전송
res.redirect()요청의 경로를 재지정
res.render()보기 템플릿 렌더링
res.send()다양한 유형의 응답을 전송
res.sendFile()파일을 옥텟 스트림의 형태로 전송
res.sendStatus()응답 상태 코드를 설정한 후 해당 코드를 문자열로 표현한 내용을 응답 본문으로서 전송

🧾 정적 파일 제공

이미지, CSS 파일 및 JavaScript 파일과 같은 정적 파일을 제공하려면 express.static을 사용

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

다음과 같이 public 디렉토리에 포함된 파일을 로드할 수 있다

http://localhost:3000/images/kitten.jpg
http://localhost:3000/css/style.css
http://localhost:3000/js/app.js
http://localhost:3000/images/bg.png
http://localhost:3000/hello.html

🔥 미들웨어

  • 서로 다른 애플리케이션이 서로 통신하는 데 사용되는 소프트웨어
  • 중간에서 조정과 중개의 역할을 수행

✔️ express의 핵심은 미들웨어이다

✔️ 미들웨어 함수는 요청 오브젝트(req), 응답 오브젝트 (res), 그리고 애플리케이션의 요청-응답 주기 중 그 다음의 미들웨어 함수 대한 액세스 권한을 갖는 함수이다. 그 다음의 미들웨어 함수는 일반적으로 next라는 이름의 변수로 표시된다

✔️ 아래 이미지에서 function(req, res, next) {} 부분이 미들웨어이다

✔️ 미들웨어 사용

app.use(미들웨어)
app.use(미들웨어 사용경로, 미들웨어)
app.METHOD(미들웨어)
app.METHOD(미들웨어 사용경로, 미들웨어)

미들웨어 예제

const express = require('express');

const app = express();

// app.use가 미들웨어가 아니라 app.use()의 인자안의 함수가 미들웨어
app.use(function (req, res, next) {
  req.requestTime = Date.now(); // req라는객체에 requestTime 키와 밸류를 래퍼로 등록. requestTime는 사용자가 정한 값이다.
  next(); // 다음 미들웨어 함수를 작동
});

// app.get이 미들웨어가 아니라 app.get()의 인자안의 함수가 미들웨어
app.get('/', function (req, res) { // 위에서 next()가 호출되면 이 콜백함수가 작동
  res.send(req.requestTime); // 위 미들웨어에서 requestTime 객체를 등록했고 next()를 사용했기 때문에 호출해서 데이터 사용 가능
});

// 서버 실행
app.listen(3000);
// server.js
const express = require('express');
const path = require('path');	// path 모듈
const app = express();

// __dirname : 현재 위치를 가리키는 node.js의 전역변수
// path.join : 디렉토리 주소 구분자에 상관없이 주소를 완성해줌
app.use(express.static(path.join(__dirname, 'html')));	// 정적 파일 제공
app.get('/', (req, res) => {
  res.sendFile(path.join(__dirname, 'html', 'main.html'));
});
app.get('/about', (req, res) => {
  res.sendFile(path.join(__dirname, 'html', 'about.html'));
});

app.listen(3000, () => {
  console.log(`Example app listening on port 3000`);
});




Reference

https://expressjs.com/ko/starter/installing.html
https://inpa.tistory.com/entry/EXPRESS-%F0%9F%93%9A-%EB%AF%B8%EB%93%A4%EC%9B%A8%EC%96%B4-%F0%9F%92%AF-%EC%9D%B4%ED%95%B4-%EC%A0%95%EB%A6%AC

profile
🦋개발 공부 기록🦋

0개의 댓글