Node.js

[생활코딩] Node.js 강의 11일차 (Web3-Express)

jadePark 2021. 7. 2. 13:20

페이지 생성 구현

  • create 라우트 
  • create_process 라우트 - post 

페이지 수정 구현

  • update 라우트 :get '/update/:pageId' , request.params.pageId,<a href="/update/${title}">update</a>
  • update_process 라우트 - post ,response.writeHead(302, {Location: `/page/${title}`});

페이지 삭제 구현

  • delete_process 라우트
  • 리다이렉트 :response.writeHead(302,{Location:`/`}); response.end(); 에서 response.redirect('/'); 로

 

var express = require('express')
var app = express()
var fs = require('fs');
var path = require('path');
var sanitizeHtml =require('sanitize-html');
const { request } = require('http');
var template = require('./lib/template.js');
var qs = require('querystring');

app.get('/', function(request, response){
  fs.readdir('./data',function(error,filelist){
    var title = 'Welcome';
    var description  = 'Hello Node.js'
    var list = template.list(filelist);
    var html = template.html(title,list,`<h2>${title}</h2>${description}`,
    `<a href ="/create">create</a>`);
    response.send(html);
  });
});

app.get('/page/:pageId', function(request, response){
  fs.readdir('./data',function(error,filelist){
    var filteredID = path.parse(request.params.pageId).base;
    fs.readFile(`data/${filteredID}`,'utf8',function(err,description){
      var title = request.params.pageId;
      var sanitizedTitle = sanitizeHtml(title);
      var sanitizedDescription = sanitizeHtml(description,{
        allowedTags:['h1']
      });
      var list = template.list(filelist);
      var html= template.html(title,list,`<h2>${sanitizedTitle}</h2>${sanitizedDescription}`,
      `<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);
    });
  });
});

app.get('/create',function(request,response){
  fs.readdir('./data',function(error,filelist){
    var title = 'Web - create';
    var list = template.list(filelist);
    var html = template.html(title,list,`
    <form action="/create_process" method="post">
      <p><input type="text" name="title" placeholder="text"></p>
      <p>
        <textarea name="description" placeholder="description"></textarea>
      </p>
      <p>
        <input type="submit">
      </p>
    </form>
    `,'');
    response.send(html);
  });
});

app.post('/create_process',function(request,response){
  var body = '';
  request.on('data',function(data){
      body = body + data;
  });
  request.on('end',function(){
    var post = qs.parse(body);
    var title = post.title;
    var description = post.description;
    fs.writeFile(`data/${title}`,description,'utf8',
    function(err){
      response.redirect(`/?id=${title}`);
    })
  });
});

app.get('/update/:pageId', function(request, response){
  fs.readdir('./data', function(error, filelist){
    var filteredId = path.parse(request.params.pageId).base;
    fs.readFile(`data/${filteredId}`, 'utf8', function(err, description){
      var title = request.params.pageId;
      var list = template.list(filelist);
      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);
    });
  });
});
 
app.post('/update_process', function(request, response){
  var body = '';
  request.on('data', function(data){
      body = body + data;
  });
  request.on('end', function(){
      var post = qs.parse(body);
      var id = post.id;
      var title = post.title;
      var description = post.description;
      fs.rename(`data/${id}`, `data/${title}`, function(error){
        fs.writeFile(`data/${title}`, description, 'utf8', function(err){
          response.writeHead(302, {Location: `/page/${title}`});
          response.end();
        })
      });
  });
});

app.post('/delete_process',function(request,response){
  var body = '';
  request.on('data',function(data){
      body = body + data;
  });
  request.on('end',function(){
    var post = qs.parse(body);
    var id = post.id;
    var filteredID = path.parse(id).base;
    fs.unlink(`data/${filteredID}`,function(error){
      response.redirect('/');
    })
  });
})

app.listen(3000, function(){
  console.log('Example app listening on port 3000!')
});