ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [생활코딩] Node.js 강의 11일차 (Web3-Express)
    Node.js 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!')
    });
Designed by Tistory.