just do it

[Node.js]파일생성과 리다이렉션 본문

언어&프레임워크/Node.js

[Node.js]파일생성과 리다이렉션

밍풀 2023. 1. 16. 18:29

위와같이 사용자가 입력한 title, description 정보 받는 법 앞서 함

 

이제는 node.js 로 파일을 만드는 방법 알아보기

fs.writefile(file, data, callback) 이용

file자리에 만들 파일 이름(경로포함), description에 파일안에 들어갈 내용

callback함수는 파일 잘 만들어 졌을 때 실행될 내용 => 여기선 일단 화면에 sucess 출력

이제 writeFile이 잘 실행되고나서

(사용자가 입력한 내용 파일생성 잘 마치고나서) 

아래와 같이 사용자가 입력한 제목, 내용을 담은 페이지로 이동하게 만들기=> 리다이렉션 이라고 함

 

 

리다이렉션 하는 방법

그런데 301은 저 주소로 영원히 바뀌었단 뜻, 지금은 일시적으로 바뀌는 것 필요함

따라서 302 사용 ; 페이지를 다른곳으로 리다이렉션 시켜라

 

위와 같이 코드 수정

 

그러면 내용입력하면 바로 위와같이 내용 보이는 페이지로 이동하게 됨

 

 

지금까지의 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
var http = require('http');
var fs = require('fs');
var url = require('url');
var qs = require('querystring');
 
function HTMLtemplate(title, list, body){
  return `
  <!doctype html>
  <html>
  <head>
    <title>WEB1 - ${title}</title>
    <meta charset="utf-8">
  </head>
  <body>
    <h1><a href="/">WEB</a></h1>
    ${list}
    <a href="/create">create</a>
    ${body}
  </body>
  </html>
  `;
}
function ListTemplate(filelist){
  var list = '<ul>';
  var i =0;
  while(i<filelist.length){
    list=list+`<li><a href="/?id=${filelist[i]}">${filelist[i]}</a></li>`;
    i=i+1;
  }
  list = list+'</ul>';
  return list;
}
 
var app = http.createServer(function(request,response){
    var _url = request.url;//사용자가 요청한 값 /?id=CSS 이런식의 쿼리스
    var queryData = url.parse(_url, true).query;//{id : 'css'}같은 객체
    var pathname=url.parse(_url, true).pathname;
    if(pathname==='/'){
      if(queryData.id===undefined){
        fs.readdir('./data'function(error,filelist){
          var title ='Welcome';
          var description='Hello Node.js';
          var list = ListTemplate(filelist);
          var template = HTMLtemplate(title, list, `<h2>${title}</h2><p>${description}</p>`);//주소창에 쿼리스트링 부분에 /?id=min 입력시 title이 min으로 치환되어 화면나옴
          response.writeHead(200);
          response.end(template);
        })
      }else{
 
        fs.readdir('./data'function(error,filelist){
       fs.readFile(`data/${queryData.id}`,'utf8',function(err,description){
        var title = queryData.id;// css 같은 딱 id부분 즉 /?id= 요자리가 title
        var list = ListTemplate(filelist);
        var template = HTMLtemplate(title, list, `<h2>${title}</h2><p>${description}</p>`);
          response.writeHead(200);
          response.end(template);
        });
    })
  }
else if(pathname==="/create"){
  fs.readdir('./data'function(error,filelist){
    var title ='WEB';
    var list = ListTemplate(filelist);
    var template = HTMLtemplate(title, list,
       `<form action="http://localhost:3000/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.writeHead(200);
    response.end(template);
  });
 
}else if(pathname==="/create_process"){
  var body='';
  request.on('data'function(data){//post로 받은 정보가져옴;
    body=body+data;
  });
  request.on('end'function(end){
    var post = qs.parse(body);//post로 받은 정보를 객체화시켜 전환;
    var title = post.title;
    var description=post.description;
    fs.writeFile(`data/${title}`,description,'utf8',function(err){
      response.writeHead(302, {location : `/?id=${title}`});
      response.end();
    })
 
  });
 
}else{
  response.writeHead(404);
  response.end('Not Found');
}
});
app.listen(3000);
 
cs