Express는 client의 요청을 받아 처리할 때 미들웨어라는 개념을 사용한다. Express 애프리케이션은 기본적으로 일련의 미들웨어 함수 호출이다.

 

 

 

미들웨어란 ?

미들웨어 함수는 req(요청) 객체, res(응답) 객체, 그리고 어플리케이션 요청-응답 사이클 도중 그 다음의 미들웨어 함수에 대한 엑세스 권한을 갖는 함수이다.

미들웨어란 간단하게 말하면 클라이언트에게 요청이 오고 그 요청을 보내기 위해 응답하려는 중간(미들)에 목적에 맞게 처리를 하는, 말하자면 거쳐가는 함수들이라고 보면 되겠다.

예를 들어서 요청-응답 도중에 시간을 콘솔 창에 남기고 싶으면 미들웨어 함수를 중간에 넣어서 표시를 한 뒤에 계속해서 다음 미들웨어들을 처리할 수 있도록 하는 것이다.

다음 미들웨어 함수에 대한 엑세스는 next 함수를 이용해서 다음 미들웨어로 현재 요청을 넘길 수 있다.

next라는 말에서 알 수 있듯이 next를 통해 미들웨어는 순차적으로 처리된다. 

 

 

 

 

애플리케이션 레벨 미들웨어

app.use에서 선언된 function이 미들웨어이다.

const express = require('express');
const app = express();
app.listen(3000);

app.use(function(req, res){
  res.send('Express Server!!!');
});

 

 

 

 

한 개의 요청을 여러개의 미들웨어가 처리할 수 있다. next 인자를 처리하면 하위 스택을 처리하게 된다.

 

 

 

 

 

라우트를 사용하는 방법, client 요청을 http method 별로 처리 가능하다.

get 이면 get, post 면 post

 

 

 

 

 

next를 사용해서 미들웨어를 여러개 실행할 수 있다. 하나의 경로에 여러개의 라우트를 정의하는 것도 가능하다.

그러나 동일한 메소드를 2개이상 만들고 앞에서 response를 처리하면 다음 메소드는 실행되지 않는다.

 

 

 

 

 

PS : nodemon

nodemon을 설치하면 서버를 껏다 켜지 않아도 저장한 것이 적용이 되어 편리하다

npm install -g nodemon@2.0.9

터미널에서 이 명령어로 설치하면 된다.

그 후 nodemon index로 실행한다.

 

response.statusCode 는 상태코드를 지정해서 전달하기가 가능하다. 404 오류 일으킬 수도 있다.

response.setHeader는 header를 설정할 수 있다.

response.writeHead는 위의 두 코드를 간단하게 줄여서 사용이 가능하다.

 

 

 

 

 

상태코드는 200, header의 Content-Type 값이 설정한 대로 되어 있는걸 확인할 수 있다.

 

 

 

 

 

write와 end를 이용해 response body를 만들 수 있다. 다음과 같이 write에 해당 코드 값을 하나하나 넣는 방식도 있고, 

response.end('<html><body><h1>Hello, World!</h1></body></html>');

이 처럼 end에 모든 코드들을 몰아서 집어 넣는 방식도 있다.

 

 

const http = require('http');

http.createServer((request, response) => {
  const { headers, method, url } = request;
  let body = [];
  request.on('error', (err) => {
    console.error(err);
  }).on('data', (chunk) => {
    body.push(chunk);
  }).on('end', () => {
    body = Buffer.concat(body).toString();

    response.on('error', (err) => {
      console.error(err);
    });

    response.writeHead(200, {'Content-Type': 'application/json'})
    const responseBody = { headers, method, url, body };
    response.end(JSON.stringify(responseBody))
  });
}).listen(8080);

 

 

 

 

 

 

에코서버로 다음과 같이 /echo로 요청하는 post 메소드에 대해서 응답하는 서버를 만들 수 있다.

 

 

 

 

만약 Get 방식으로 서버를 전송했다면 설정한 바와 같이 404 에러가 뜬다.

 

 

 

 

 

POST 방식일 경우 정상적으로 body 값이 응답이 되는걸 확인할 수 있다.

 

 

웹서버 객체를 만든다.

 

 

createServer는 server 객체를 생성하고 발생한 이벤트를 전달하는 역할을 한다.

 

 

 

 

생성한 서버에서 request를 받아 처리할 수 있다. 요청보낸 헤더는 console.log를 통해 다음과 같이 출력된다.

 

 

 

 

 

 

 

request에는 url, method, header 등의 정보가 포함된다.

 

 

 

 

 

post나 put의 request에서 stream으로 전달되는 data와 end를 이용하면 body를 읽어 올 수 있다.

 

 

 

 

구글에서 Postman을 검색 후 다운로드 한다. Postman은 개발한 API를 테스트하고, 테스트 결과를 공유하여 API 개발의 생산성을 높여주는 플렛폼이다.

 

 

 

 

테스트 서버를 만든다. 서버를 만든 후 포트를 8080으로 설정하고 터미널에 node index(js명) 명령어를 실행시키면 서버가 실행된다. 그 전에 response.write로 불러올 값을 설정한다.

 

 

 

 

다운로드한 Postman에 가서 http://localhost:8080 을 get 방식으로 전송하면 write.response로 불러올 값이 불러와지는 것을 확인할 수 있다.

 

 

 

npm init -y 

npm init 명령어는 Node.js 프로젝트를 초기화하고 프로젝트의 package.json 파일을 생성하는 명령어

 

 

 

 

Mysql 연동하기

 

user 테이블이 있다.

 

 

 

 

https://www.npmjs.com/package/mysql

 

mysql

A node.js driver for mysql. It is written in JavaScript, does not require compiling, and is 100% MIT licensed.. Latest version: 2.18.1, last published: 4 years ago. Start using mysql in your project by running `npm i mysql`. There are 7523 other projects i

www.npmjs.com

npmjs.com 사이트에서 mysql을 검색 후, 터미널에  npm i mysql 명령어로 mysql을 설치한다.

 

 

 

 

해당 사이트의 코드들을 붙여넣기 해서, 본인의 mysql 정보(비밀번호, 데이터베이스 등등)를 수정하고 원하는 쿼리문을 작성한다. SELECT문을 적었을 시, 모든 데이터의 값들이 조회되는 것을 확인할 수 있다.

 

 

 

 

설명

nodejs는 모듈 단위로 기능을 분리해서 개발을 할 수 있음. 또한 분리된 기능들을 조립해서 새로운 기능을 만들 수 있다. 모듈은 module.exports 또는 exports 를 통해 외부로 공개할 수 있다.

 

 

변수, 함수를 활용한 예제

 

module.export를 통해 변수와 함수를 선언하고, 다른 js에서 require를 통해 해당 변수와 함수를 불러올 수 있다.

 

 

 

폴더를 사용한 예제

 

폴더 안의 것들을 불러올 수 있는데, 이 경우 해당 폴더에 js를 통합해서 보내는 index.js 파일을 만들고 그 안에 폴더 안의 js 함수들을 넣고 module.exports로 보낸다.

그리고 폴더 밖에서 해당 모듈을 불러올 경우 해당 폴더 경로를 require한 후 변수를 선언하고, 그 변수를 통해 함수를 불러오면 된다.

 

 

 

Core Module

 

nodejs에 기본적으로 포함되어 있는 모듈이다.

 

 

 

 

 

외부 Module (NPM)

https://www.npmjs.com/package/

 

express

Fast, unopinionated, minimalist web framework. Latest version: 4.18.3, last published: 12 days ago. Start using express in your project by running `npm i express`. There are 77336 other projects in the npm registry using express.

www.npmjs.com

 

npm에서 설치한 외부 모듈들을 검색해서 쓸 수 있다.

일단 express라는 nodejs에서 서버를 개발할 때 유용한 모듈이 있는데 그걸 검색해서 써보기로 했다.

 

 

 

 

터미널에서 해당 명령어로 express를 다운로드 한다.

 

 

 

 

해당 예제를 복붙해서 가져왔다. 터미널에서 실행 후 로컬호스트에서 3000번째 주소로 가면 보낸 메세지인 "Hello World"가 떠 있는 것을 확인할 수 있다.

 

 

 

정의

Node.js는 Chrome V8JavaScript 엔진으로 빌드된 JavaScript 런타임
Node.js는 웹 서버의 개념이 아닌 javascript로 서버를 구축하고 서버에서 JavaScript가 작동되도록 해주는 런타임 환경(플랫폼)

웹 서버(web server)란?
- HTTP 또는 HTTPS를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)를 전송해주는 서비스 프로그램

런타임(runtime)이란?
- 프로그래밍 언어는 주로 고급 언어로, 기계(컴퓨터)가 바로 이해할 수 없기에 고급 언어로 작성된 소스 코드를 기계어로 변환하는 과정

자바스크립트 런타임(javascript runtime)이란?
- 프로그래밍 언어로 작성된 javascript 언어를 컴퓨터가 이해할 수 있는 기계어로 변환시켜주는 역할

 

 

 

Node.js의 장점

Javascript 언어로 프론트엔드 뿐만 아니라 백엔드 개발 환경을 구성할 수 있고, 다양한 패키지 매니저(npm)을 기반으로 다양한 모듈을 제공하며 필요 라이브러리에 대해 설치하고 사용할 수 있기에 효율성이 좋다. 빠르게 환경 구성을 하여 개발을 해야하는 경우에 유용하고 배동기 방식에 어울리는 서비스(네트워크 스트리밍 서비스, 채팅 서비스 등)에 유용하다.

 

 

 

설치법

https://nodejs.org/en/download

 

Node.js — Download

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

LTS 윈도우 버전으로 설치한다. 추가적인 요소들을 설치할 것이냐고 물을 경우 체크를 하고 다운로드 한다.

 

 

 

명령 프롬프트에 가서 node.js가 제대로 설치되어 있는지 확인하면 된다.

+ Recent posts