express

  • 내가 만들고 싶은 웹 서비스 구현을 위해 필요한 모든 일을 틀 안에서 할 수 있음.

구조

  • express-generator를 global로 설치
npm install express-generator -g

⚠️에러 발생

→ express : 이 시스템에서 스크립트를 실행할 수 없으므로 파일을 로드할 수 없습니다.

해결 (Window)

  • Powershell을 관리자로 접속하여 실행 후 다음 코드 작성.
    • Powershell 아이콘을 우클릭 후, 관리자로 실행 클릭.
      1. Get-ExecutionPolicy 입력하면 Restricted라고 뜰 것이다.
      2. Set-ExecutionPolicy RemoteSigned 입력하여 변경을 y로 허락하고
      3. Get-ExecutionPolicy 다시해보면 RemoteSigned로 변경된 것을 확인할 수 있다.
         Get-ExecutionPolicy 
         //Restricted 결과값
         Set-ExecutionPolicy RemoteSigned
         /*
         실행 규칙 변경
        실행 정책은 신뢰하지 않는 스크립트로부터 사용자를 보호합니다. 실행 정책을 변경하면 about_Execution_Policies 도움말
        항목(https://go.microsoft.com/fwlink/?LinkID=135170) 설명된 보안 위험에 노출될  있습니다. 실행 정책을
        변경하시겠습니까?
        [Y] (Y)  [A] 모두 (A)  [N] 아니요(N)  [L] 모두 아니요(L)  [S] 일시 중단(S)  [?] 도움말 (기본값은 "N"): y
         */
         Y
         Get-ExecutionPolicy
         //RemoteSigned  변경 완료
      
  • express를 입력하면 다음과 같이 뜨고, 📁bin, public,routes, views 📄app.js, package.json 이 생성되었을 것이다.
 express     

  warning: the default view engine will not be jade in future releases
  warning: use `--view=jade' or `--help' for additional options   

   create : public\
   create : public\javascripts\
   create : public\images\
   create : public\stylesheets\
   create : public\stylesheets\style.css
   create : routes\
   create : routes\index.js
   create : routes\users.js
   create : views\
   create : views\error.jade
   create : views\index.jade
   create : views\layout.jade
   create : app.js
   create : package.json
   create : bin\
   create : bin\www

   install dependencies:
     > npm install

   run the app:
     > SET DEBUG=express-demo:* & npm start

📁bin 📄www.js

var app = require('../app');
var debug = require('debug')('express-demo:server');
var http = require('http'); 
/* express에서 node.js의 
	 http내장 모듈을 사용함을 알 수 있음 */
	 

//포트 설정
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

📄app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
//웹사이트가 사용자 정보를 저장하고 불러올 때 사용하는 "쿠키"를 다룰 수 있게 해주는 모듈

var logger = require('morgan');
//morgan: 웹 서버에 요청이 들어올 때마다 그 정보를 로그로 기록하게 해주는 모듈

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
/*
views
: HTML 파일 같은 템플릿 파일이 어디에 있는지 설정/
 여기서는 views 폴더에 있다고 설정함
 
view engine
: 뷰 엔진은 템플릿 파일을 실제 HTML로 변환해주는 역할
  Jade라는 뷰 엔진을 사용

*/

//미들웨어 설정
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

/*

logger('dev')
 : 요청이 들어올 때마다 그 정보를 콘솔에 출력해주는 역할
express.json()
 : JSON 형식으로 된 요청의 데이터를 처리할 수 있게 도와줌.
express.urlencoded({ extended: false })
: 폼(form)으로 제출된 데이터를 처리할 수 있게 도움.
cookieParser()
: 쿠키를 다룰 수 있게 해주는 미들웨어
express.static(path.join(__dirname, 'public'))
: public 폴더에 있는 파일들을 정적 파일(이미지, CSS 파일 등)로 제공

*/

app.use('/', indexRouter);
app.use('/users', usersRouter);
/* 경로를 연결하여 각각 라우터로 처리 

users.js
-----------------
var express = require('express');
var router = express.Router();

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});

module.exports = router;

*/

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
})
// 요청한 페이지를 못 찾을 때 404 에러를 발생

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

라우터?

웹 애플리케이션에서 특정 URL 경로에 따라 어떤 동작을 할지 결정해주는 기능.웹사이트에서 주소(경로)를 입력했을 때 그 주소에 맞는 페이지를 보여주거나, 특정 작업을 수행하는 역할을 함.

미들웨어? (express)

  • 웹 프레임워크(Express) 에서 서버로 들어오는 요청(request)과 서버가 응답(response)을 보내기 전에 중간에서 그 요청과 응답을 처리하는 함수
    • ex) 사용자가 로그인했는지 확인하거나, 데이터를 가공하거나, 요청에 대한 로그를 남기는 등 다양한 작업을 수행함. <사용자가 서버에 요청한 후, 그에 대한 응답을 보내기 전에 행하는 작업들. >
  • 일반적인 미들웨어의 역할
    1. 데이터 변환 및 통신: 서로 다른 시스템이 데이터를 주고받을 때, 그 데이터 형식을 맞추고 올바르게 전달되도록 하는 역할.

      ex) a시스템이 XML 형식, B시스템이 JSON 형식을 사용하면, 미들웨어가 이들 간의 형식 변환을 담당함.

    2. 서비스 통합: 여러 개의 독립적인 시스템이나 애플리케이션을 하나의 통합된 서비스로 묶어줌 ex) 고객 관리 시스템(CRM)과 주문 관리 시스템(OMS)을 통합하여 하나의 포털에서 접근g하게 함.
    3. 보안 관리: 데이터가 안전하게 전송되도록 암호화, 접근 제어를 통해 권한이 없는 사용자가 데이터에 접근하지 못하도록 함.
    4. 로깅 및 모니터링: 시스템 간의 통신이나 작업을 기록하여 추적하거나, 시스템 상태를 모니터링하는 기능을 하기도 함.
    5. 메시지 큐: 시스템 간 메시지 전달을 관리하는 메시지 큐를 제공함. ex) A 시스템이 작업을 요청 시, 미들웨어가 그 메시지를 대기열에 추가하고, B 시스템이 그 메시지를 처리할 수 있게 관리 함.