song.log

[Node.js] Express : Router(라우터) , 보안 , Express-generator 본문

DevLog/Node.js

[Node.js] Express : Router(라우터) , 보안 , Express-generator

SingaKorean 2019. 12. 30. 19:12
반응형

1. Router 

 

현업에 종사하다보면 Route가 엄청난 갯수를 이룰 때가 많다.

그렇다 보면 이를 보다 깔끔하게 정리하여 보는 것이 효율적일 때가 있다.

 

그 역할을 Router가 하는 것이다.

주소체계을 변경하여 Router를 만들 준비를 한다. 먼저 경로앞에 들어갈 키워드를 넣어 그룹화 한다.

Router라는 새로운 폴더를 생성해주고 그 안에 topic이라는 파일을 생성한다.

여태까지 routing 했던 것을 topic.js 파일로 옮긴다. 

topic.js 파일에는 아래의 형식과 기존의 코드의 그룹화 한 것을 합쳐준다 

 

<topic.js> 

var express = require('express');
var router = express.Router();



 module.exports = router;

<main.js>

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

app.use('/topic', topicRouter);

 

합친 코드

var express = require('express');
var router = express.Router();
var path = require('path');
var fs = require('fs');
var template = require('../lib/template.js');
var sanitizeHtml = require('sanitize-html');


router.get('/create', function(request,response){
  
    var title = 'Web- create';
    var list = template.list(request.list);
    var html = template.HTML(title, list, `
      <form action="/create_process" method="post">
        <p><input type="text" name="title" placeholder="title"></p>
        <p>
          <textarea name="description" placeholder="description"></textarea>
        </p>
        <p>
          <input type="submit">
        </p>
      </form>
    `,'');
    response.send(html);
    
  });
  
  router.post('/create_process', function(request, response){
    var post = request.body;
    var title = post.title;
    var description = post.description;
    
    fs.writeFile(`data/${title}`,description,'utf-8',function(err){
      response.writeHead(302, {Location: `/`});
      response.end();
    });
  });
  
  
  router.post('/update_process', function(request, response){
    var post = request.body;
    var id = post.id;
    var title = post.title;
    var description = post.description;
    fs.rename(`data/${id}`,`data/${title}`,function(err){
      fs.writeFile(`data/${title}`,description,'utf-8', function(err){
        response.writeHead(302,
          {Location: `/${title}`});
          response.end();
      });
    });
  });
  
  router.post('/delete_process', function(request, response){
    var post = request.body;
    var id = post.id;  
    fs.unlink(`./data/${id}`, function(err){
      response.writeHead(302,{Location: `/`});
      response.end();
    });
  });
  
  router.get('/update/:pageid', function(request, response){
    
    var filteredId = path.parse(request.params.pageid).base;
    fs.readFile(`./data/${filteredId}`,'utf-8', function(err, description){
      var title = request.params.pageid;
      var list = template.list(request.list);
      var html = template.HTML(title, list,`
      <form action="/update_process" method="post">
        <input type="hidden" name="id" value="${title}">
        <p><input type="text" name="title" placeholder="title" value="${title}"></p>
        <p>
          <textarea name="description" placeholder="description">${description}</textarea>
        </p>
        <p>
          <input type="submit">
        </p>
      </form>
    `,`<a href="/create">create</a> <a href="/update/${title}">update</a>`);
    response.send(html);
    });
  });
  
  
  router.get('/:pageid', function(request, response, next){
    
    var filteredId = path.parse(request.params.pageid).base;
    fs.readFile(`data/${filteredId}`, 'utf8', function(err, description){
      if(err){
        next(err);
      }else{
        var title = request.params.pageid;
        var sanitizedTitle = sanitizeHtml(title);
        var sanitizedDescription = sanitizeHtml(description,{
          allowedTags:['h1']
        });
        var list = template.list(request.list);
        var html = template.HTML(sanitizedTitle, list,
          `<h2>${sanitizedTitle}</h2><p>${sanitizedDescription}</p>`,
        `<a href="/create">create</a>  <a href="/update/${sanitizedTitle}">update</a>
        <form action="/delete_process" method="post">
          <input type="hidden" name="id" value="${sanitizedTitle}">
          <input type="submit" value="delete">
        </form>
        `);
    
        response.send(html);
      }
    });
  });
  module.exports = router;

 

 

2. express를 사용할 때의 보안

1. express의 최신 버전을 사용할 것

2. https /TLS을 사용

3. helmet을 사용 - helmet의 디테일 기능 : Use Helmet https://expressjs.com/en/advanced/best-practice-security.html

npm install --save helmet 

4. 쿠키를 안전하게 사용 할 것

5. dependencies를 잘 관리할 것 : nsp를 통해 package-json안에 있는 npm들을 체크해 줌

npm i nsp -g

 

3. express-generator 설치 방법 및 사용법

 

먼저, npm을 설치

npm install express-generator -g

-h로 할 수 있는 옵션 체크 

express -h

 

express myapp으로 20191230폴더 안에 새로운 프로젝트 생성

express myapp

생성된 기본 틀

cd myapp
npm install

npm install로 기본적으로 필요로 하는 npm을 자동으로 설치 

npm start

 

 

 

참조한 생활코딩 URL :

https://opentutorials.org/module/3590/21425

https://opentutorials.org/module/3590/21426

https://opentutorials.org/module/3590/21428

 

반응형
Comments