๊ด€๋ฆฌ ๋ฉ”๋‰ด

C-log

๐Ÿ“—Nodejs : section30~33 - form ๊ทธ๋ฆฌ๊ณ  response ๋ณธ๋ฌธ

๐Ÿ“—Nodejs/โšกver.0

๐Ÿ“—Nodejs : section30~33 - form ๊ทธ๋ฆฌ๊ณ  response

4:Bee 2024. 6. 24. 12:38
728x90

์ด๋ฒˆ์—๋Š” form์—์„œ ๋ถ€ํ„ฐ response๊นŒ์ง€ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์„ ๋ฐ›์•„์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ต์„ ์ „๋‹ฌํ•˜๋Š” ๋ชจ๋“  ๊ณผ์ •๋“ค์„ ์‚ดํŽด ๋ณผ ๊ฒƒ์ด๋‹ค. ๋น„๋ก ์‹ค์ œ data๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” sql์ด ์•„๋‹ˆ์ง€๋งŒ ์ด๋ฅผ ํ†ตํ•ด์„œ ๋Œ€๋žต์ ์ธ ํ๋ฆ„๊ณผ ๋งฅ๋ฝ์„ ์–ด๋Š์ •๋„ ๊ฐ€๋Š  ํ•ด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.


form

์•„๋ž˜์™€ ๊ฐ™์ด html์„ ์ž‘์„ฑํ•ด๋ณด๊ณ  ์‹คํ–‰์„ ํ•ด๋ณด๊ณ  URI์˜ ๊ฒฐ๊ณผ๋ฅผ ์‚ดํŽด๋ณด์ž.

<!-- form.html -->

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <form action="http://localhost:3000/process_create">
    <p><input type="text" name="title"></p>
    <p>
      <textarea name="description"></textarea>
    </p>
    <p>
      <input type="submit">
    </p>
  </form>
</body>

</html>

URI

http://localhost:3000/process_create?title=test&description=test+des

* ์ฐธ๊ณ ๋กœ ์œ„์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋กœ์ปฌ ์„œ๋ฒ„๋ฅผ ๋Œ๋ ค์•ผ ํ•œ๋‹ค. ๋ณธ์ธ์€ live server๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

๊ฒฐ๊ณผ๋ฅผ ์‚ดํŽด๋ณด๋ฉด form์œผ๋กœ ์ „์†ก๋œ input๊ฐ’์œผ๋กœ URI queryString์„ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, input์— ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์„ input type์˜ submit์œผ๋กœ ์ „์†ก์„ ํ•˜๋ฉด formํƒœ๊ทธ์˜ action ์†์„ฑ์œผ๋กœ ์ง€์ •ํ•œ ์ฃผ์†Œ URI์— queryString์„ ๋ถ€์—ฌํ•œ ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์•„์„œ ์›น์— ์ •๋ณด๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ์šฐ๋ฆฌ๊ฐ€ Get์œผ๋กœ id์˜ quryString ์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์€ ๊ดœ์ฐฎ์ง€๋งŒ post์™€ ๊ฐ™์€ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ์ „๋‹ฌํ•  ๋•Œ๋Š” ์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๊ฐ€ ๋…ธ์ถœ ๋˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์ง€ ์•Š๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐฉ์‹(method)์„ ์ง€์ •ํ•ด ์ฃผ๋ฉด ์•„๊นŒ์™€ ๊ฐ™์ด URI์˜ queryString์ด ์™ธ๋ถ€๋กœ ๋…ธ์ถœ ๋˜์ง€ ์•Š๋Š”๋‹ค.

<!-- form.html -->

<form action="http://localhost:3000/process_create" method="POST">

URI

http://localhost:3000/process_create

Create

๊ธ€์„ ์ƒ์„ฑํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธ€์„ ์ƒ์„ฑํ•˜๋Š” ํŽ˜์ด์ง€๋กœ ๋„˜์–ด ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋งํฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด aํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ ํ•˜๋ฉด ๋œ๋‹ค.

/* main.js */
/* ์ดํ•˜ ์ƒ๋žต */

function templateHTML(title, list, body) {//list๋Š” ๋ฐ›์•„์˜จ list๋ฅผ return์„ ํ†ตํ•ด์„œ ์ œ์ž‘๋œ๋‹ค.
  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>
  `;
}

/* ์ดํ•˜ ์ƒ๋žต */

์ง€๋‚œ ์‹œ๊ฐ„์— ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ์˜ ํšจ์œจ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ ๋ Œ๋”๋ง ๋˜์–ด์•ผํ•˜๋Š” html๋ถ€๋ถ„์„ ํ•จ์ˆ˜๋กœ ๋”ฐ๋กœ ๋นผ๋‚ด์„œ template์— ์ •์˜ ํ–ˆ๋‹ค. aํƒœ๊ทธ๋ฅผ ์œ„์™€ ๊ฐ™์€ ๊ณณ์— ์ถ”๊ฐ€ ํ•ด์„œ '/create' ํŽ˜์ด์ง€๋กœ ๋„˜๊ฒจ ์ค„ ์ˆ˜ ์žˆ๊ฒŒ ์„ค์ •์„ ํ•ด์ค€๋‹ค. ์ดํ›„ ํ•ด๋‹น path์— ๋งž๋Š” ํŽ˜์ด์ง€๋ฅผ createServer์— ์ถ”๊ฐ€ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์ถ”๊ฐ€ ํ•ด์•ผํ•  path๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

/* main.js */
//var app = http.createServer(function (request, response) { ~

else if (pathname === '/create') { //pathname(url.parse(_url, true).pathname)์ด create์ผ ๊ฒฝ์šฐ ์•„๋ž˜ ์ฝ”๋“œ ์‹คํ–‰
    fs.readdir('./data', function (error, filelist) {
      var title = 'WEB - create';
      // var description = 'Hello, Node.js';
      var list = templateList(filelist); //ํ•ด๋‹น ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์˜จ๋‹ค. ์—ฌ๊ธฐ์„œ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ.
      var template = templateHTML(title, list, `
      <form action="http://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>`);//html ๊ตฌ๋ฌธ์„ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ
      response.writeHead(200); //200์ด๋ž€ web๋ธŒ๋ผ์šฐ์ €์˜ ์Šน์ธ์œผ๋กœ ์ƒ์„ฑ
      response.end(template);
    }

 

 

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด ์ด์ œ '/create' pathName์„ ๊ฐ€์ง„ URI์ฃผ์†Œ๋กœ ๋„˜์–ด๊ฐ€ ๊ธ€์„ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€๊ฐ€ ์™„์„ฑ์ด ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•ด์„œ ๋ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์€ ์œ„์—์„œ ๋‹ค๋ฃจ์—ˆ๋˜ formํƒœ๊ทธ์ด๋‹ค. ์—ญ์‹œ๋‚˜ ๊ธ€์„ ์ƒ์„ฑํ•˜๋Š” ํŽ˜์ด์ง€๊ธฐ ๋•Œ๋ฌธ์— formํƒœ๊ทธ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐฉ์‹(method)๋Š” post์—ฌ์•ผํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด form ํƒœ๊ทธ๋กœ ๋ถ€ํ„ฐ ์ „์†ก๋œ ๋ฐ์ดํ„ฐ๋“ค์„ ์€๋‹‰ํ•˜๊ฒŒ ๋˜๋ฉฐ ์™ธ๋ถ€๋กœ ๋ถ€ํ„ฐ ๋…ธ์ถœ๋˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.


create_process(doCreate)

์ด์ œ ๊ธ€์„ ์ƒ์„ฑํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด ์ž‘์„ฑ๋œ ๊ธ€์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋Š” ํŽ˜์ด์ง€๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์•ž์ „์˜ ์ฝ”๋“œ์—์„œ formํƒœ๊ทธ์˜ action์˜ URI๋Š” '/create_process'๋กœ ๋˜์–ด ์žˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ createํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์—ˆ๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ ์ด๋ฒˆ์—๋„ ๊ฐ™๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

/* main.js */
var qs = require('querystring'); //๋ชจ๋“ˆ

//var app = http.createServer(function (request, response) { ~

else if (pathname === '/create_process') { //create์—์„œ POSTํ•œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
    let body = ''
    request.on('data', function (data) {
      body = body + data
    })
    request.on('end', function () {
      let post = qs.parse(body) //querystring ๋ชจ๋“ˆ์„ ํ†ตํ•ด์„œ create์—์„œ post๋กœ ์ „์†ก๋ฐ›์€ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
      var title = post.title;
      var description = post.description;
      console.log(post)
    })
    response.writeHead(200); //200์ด๋ž€ web๋ธŒ๋ผ์šฐ์ €์˜ ์Šน์ธ์œผ๋กœ ์ƒ์„ฑ
    response.end('success');
  }

์œ„์ฝ”๋“œ๋ฅผ ์œ ์‹ฌํžˆ ๋ณด๋ฉด body๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋‹ค. ์œ„ ๋ณ€์ˆ˜๋Š” ๋‚ด๊ฐ€ ์„œ๋ฒ„์— ์ „์†กํ•  data๋ฅผ ๋‹ด์•„๋‚ด๋Š” ์—ญํ•  ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ์‹ค์ œ API์™€ ํ†ต์‹ ์—์„œ Post๋ฅผ ํ•  ๋•Œ ๋ฐฑ์—”๋“œ์—์„œ body์— ์–ด๋–ค ๊ฐ’์„ ๋„ฃ์–ด์•ผ ํ•˜๋Š”์ง€ ๊ทœ์น™๊ณผ ์š”์†Œ๋“ค์„ ์„ค์ •ํ•˜๋Š”๋ฐ ์œ„์˜ ์ฝ”๋“œ๊ฐ€ ์ด์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด์„œ ์ž์„ธํ•œ ์‚ฌํ•ญ๋“ค์„ ์‚ดํŽด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


create_process(doCreate) ์ฝ”๋“œ์˜ ๋ถ„์„

๊ฒฝ๋กœ ํ™•์ธ

/* main.js */

else if (pathname === '/create_process') { ~
  • ์ด ์กฐ๊ฑด๋ฌธ์€ URL์˜ ๊ฒฝ๋กœ๋ช…์ด /create_process์ผ ๋•Œ๋งŒ ์‹คํ–‰๋˜๋„๋ก ํ•œ๋‹ค. ์ด ๊ฒฝ๋กœ๋Š” ํผ ๋ฐ์ดํ„ฐ(formData)๊ฐ€ ์„œ๋ฒ„๋กœpost๋˜๋Š” ์—”๋“œํฌ์ธํŠธ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

๋ฐ์ดํ„ฐ ์ˆ˜์‹ 

/* main.js */

let body = '';
request.on('data', function (data) {
  body += data;
});
  • body ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ˆ˜์‹ ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • request.on('data', callback) ๋ฆฌ์Šค๋„ˆ๋Š” ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์ŠคํŠธ๋ฆผ ํ˜•ํƒœ๋กœ ๋„์ฐฉํ•  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ๋œ๋‹ค. ์ด ๋•Œ ์ˆ˜์‹ ๋œ data๋ฅผ body์— ์‚ฝ์ž…ํ•œ๋‹ค.

๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์™„๋ฃŒ

/* main.js */

request.on('end', function () {
  let post = qs.parse(body);
  var title = post.title;
  var description = post.description;
  console.log(post);
});

 

  • request.on('end', callback) ์ด๋ฒคํŠธ๋Š” ๋ฐ์ดํ„ฐ ์ˆ˜์‹ ์ด ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ ํ˜ธ์ถœ๋œ๋‹ค. ์ด ์‹œ์ ์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ body ๋ณ€์ˆ˜์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.
  • qs.parse(body)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ URL ์ธ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด body๋ฅผ JavaScript ๊ฐ์ฒด๋กœ ํŒŒ์‹ฑํ•œ๋‹ค. qs๋Š” querystring ๋ชจ๋“ˆ์˜ ์ผ๋ฐ˜์ ์ธ ๋ณ„์นญ์ด๋ฉฐ ์ด ๊ฐ์ฒด์—์„œ title๊ณผ description ํ•„๋“œ๋ฅผ ์ถ”์ถœํ•œ๋‹ค.
    • ์ฐธ๊ณ ๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด console๋กœ ํ™•์ธ์„ ํ•ด๋ณด๋ฉด ์ด์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์–ด ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
    • /* main.js */
      
      request.on('end', function () {
            console.log("body: ", body);
            console.log("queryString: ", qs);
            let post = qs.parse(body);
            var title = post.title;
            var description = post.description;
            console.log("post: ", post);
          })
    • body:  title=%ED%85%8C%EC%8A%A4%ED%8A%B8+%EC%9E%85%EB%8B%88%EB%8B%A4.&description=%ED%85%8C%EC%8A%A4%ED%8A%B8+%EC%84%A4%EB%AA%85+%EC%9E%85%EB%8B%88%EB%8B%A4.
      queryString:  {
        unescapeBuffer: [Function: unescapeBuffer],
        unescape: [Function: qsUnescape],
        escape: [Function: qsEscape],
        stringify: [Function: stringify],
        encode: [Function: stringify],
        parse: [Function: parse],
        decode: [Function: parse]
      }
      post:  [Object: null prototype] {
        title: 'ํ…Œ์ŠคํŠธ ์ž…๋‹ˆ๋‹ค.',
        description: 'ํ…Œ์ŠคํŠธ ์„ค๋ช… ์ž…๋‹ˆ๋‹ค.'
      }

 

์‘๋‹ต

/* main.js */

response.writeHead(200); //200์ด๋ž€ web๋ธŒ๋ผ์šฐ์ €์˜ ์Šน์ธ์œผ๋กœ ์ƒ์„ฑ
response.end('success');
  • response.writeHead(200)๋กœ HTTP ์ƒํƒœ ์ฝ”๋“œ 200์„ ํด๋ผ์ด์–ธํŠธ์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค. 200์€ ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
  • response.end('success')๋กœ ์‘๋‹ต์„ ์ข…๋ฃŒํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ 'success'๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

post๋กœ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋กœ ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ธฐ fs.writeFile 

์ด์ œ create_process๋ฅผ ํ†ตํ•ด์„œ ์‚ฌ์šฉ์ž๋กœ ๋ถ€ํ„ฐ post๋กœ ๋ฐ›์€ ๋ฐ์ดํ„ฐ ๊ฐ’๋“ค์„ ๋ฐ›์•„ ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ํ–ˆ๋‹ค. ์ด์ œ ๋‚จ์€๊ฑด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋“ค์„ ๊ฐ€์ง€๊ณ  dataํด๋”์— post๋กœ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ ๊ฐ’๋“ค๋กœ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ์ž‘์„ฑํ•  ๊ฒƒ์ด๋‹ค. ์ถ”๊ฐ€๋œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

/* main.js */
// request.on('end', function () { ~
// ...์ดํ•˜ ์ƒ๋žต...
var description = post.description;
      // console.log(post)
      fs.writeFile(`data/${title}`, description, 'utf8', (err) => {
        response.writeHead(302, { Location: `/?id=${title}` }); //200์ด๋ž€ web๋ธŒ๋ผ์šฐ์ €์˜ ์Šน์ธ์œผ๋กœ ์ƒ์„ฑ
        response.end();
      })
 // ...์ดํ•˜ ์ƒ๋žต...

ํŒŒ์ผ ์“ฐ๊ธฐ()

  • fs.writeFile ํ•จ์ˆ˜๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ์™€ ์ด๋ฆ„์„ ๋ฐ›๋Š”๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” data/${title}์„ ์‚ฌ์šฉํ•˜์—ฌ data ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์— title ๋ณ€์ˆ˜์˜ ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ์ด๋ฆ„์œผ๋กœ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋ฎ์–ด์“ฐ๊ธฐ ํ•œ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ์ธ์ž์ธ description์€ ํŒŒ์ผ ์•ˆ์— ์“ธ ๋‚ด์šฉ์ด๋‹ค.
  • ์„ธ ๋ฒˆ์งธ ์ธ์ž 'utf8'์€ ํŒŒ์ผ์„ ์“ธ ๋•Œ ์‚ฌ์šฉํ•  ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์„ ์ง€์ •ํ•œ๋‹ค.
  • ๋„ค ๋ฒˆ์งธ ์ธ์ž๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋กœ ํŒŒ์ผ ์“ฐ๊ธฐ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ ์‹คํ–‰๋œ๋‹ค. ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด err ํŒŒ๋ผ๋ฏธํ„ฐ์— ์—๋Ÿฌ ๊ฐ์ฒด๊ฐ€ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

์‘๋‹ต ์ฒ˜๋ฆฌ

  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ response.writeHead(302, { Location: /?id=${title} });๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ HTTP ์ƒํƒœ ์ฝ”๋“œ 302(๋ฆฌ๋‹ค์ด๋ ‰์…˜-์ฝ”๋“œ์˜ ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋‹ค.๋Š” ๋œป)์™€ ํ•จ๊ป˜ Location ํ—ค๋”๋ฅผ ์„ค์ •ํ•œ๋‹ค. Location์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๋  ์ƒˆ๋กœ์šด URL์„ ์ง€์ •ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์œผ๋กœ id ํŒŒ๋ผ๋ฏธํ„ฐ์— title์˜ ๊ฐ’์„ ์ฃผ์–ด ํŒŒ์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ ์‚ฌ์šฉ์ž๋ฅผ ํ•ด๋‹น ํŒŒ์ผ์˜ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œํ‚ต๋‹ˆ๋‹ค.
  • response.end()๋Š” HTTP ์‘๋‹ต์„ ์ข…๋ฃŒํ•˜๊ณ  ์„ค์ •๋œ ํ—ค๋”์™€ ๋ณธ๋ฌธ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „์†กํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ณ„๋„์˜ ๋ณธ๋ฌธ ๋‚ด์šฉ์„ ์ „์†กํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋‹จ์ˆœํžˆ ์‘๋‹ต์„ ๋งˆ๋ฌด๋ฆฌ ์ง“๋Š”๋‹ค.

์‹œ๋„ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” response

post๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ด๋ฃจ์–ด ์ง€๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ response๋กœ title๊ณผ description์„ ์ „๋‹ฌํ•ด๋ณด์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

//json ํŒŒ์ผ ํ˜•์‹œ์œผ๋กœ ์‘๋‹ต
fs.writeFile(`data/${title}`, description, 'utf8', (err) => {
    if (err) {
        response.writeHead(500, { 'Content-Type': 'application/json' });
        response.end(JSON.stringify({ error: 'Failed to write file' }));
    } else {
        response.writeHead(200, { 'Content-Type': 'application/json' });
        response.end(JSON.stringify({ title: title, description: description }));
    }
});

์—ฌ๊ธฐ์„œ ์œ ์˜ํ•ด์•ผ ํ•  ์ ์€ ํฌ๋ฉง ์„ค์ •์ด๋‹ค. ํฌ๋ฉง์— ๋”ฐ๋ผ์„œ Content-Type์„ ์ž˜ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค. ํ˜„์žฌ๋Š” JSON ์‘๋‹ต์œผ๋กœ ์ฃผ๋Š” ๊ฒฝ์šฐ์ด๊ธฐ ๋•Œ๋ฌธ์— application/json์œผ๋กœ ์„ค์ •ํ–ˆ๋‹ค. ๋งŒ์•ฝ html๋กœ ์‘๋‹ต์„ ํ•  ๊ฒฝ์šฐ text/html๋กœ ์„ค์ •ํ•˜๋ฉด ๋œ๋‹ค.

728x90
Comments