Study_Develop/ํฌ์Šค์ฝ” X ์ฝ”๋”ฉ์˜จ ๋ถ€ํŠธ์บ ํ”„

4์ฃผ์ฐจ ํšŒ๊ณ ๋ก ch2. ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ, ๋™์  form ์ „์†ก, ํŒŒ์ผ ์—…๋กœ๋“œ(feat. 4์ฃผ์ฐจ ์ผ์ƒ)

hiijihyun 2023. 5. 22. 22:08
๋ฐ˜์‘ํ˜•

[ํฌ์Šค์ฝ” X ์ฝ”๋”ฉ์˜จ ํ’€์Šคํƒ ์›น๊ฐœ๋ฐœ์ž ๋ถ€ํŠธ์บ ํ”„ 7๊ธฐ]
4์ฃผ ์ฐจ ํšŒ๊ณ ๋ก
๋‘ ๋ฒˆ์งธ!!
๋ณธ๊ฒฉ์ ์ธ ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ์™€, 
form ์ „์†กํ•˜๊ธฐ๋ฅผ ๋ฐฐ์› ๋‹ค
 
4์ฃผ ์ฐจ์—” ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ ํ•„๊ธฐ์‹œํ—˜์ด ์žˆ์–ด
๊ทธ๋‚ ๊ทธ๋‚  ๋ณต์Šต์„ ์ œ๋Œ€๋กœ ๋ชป ํ–ˆ๋‹ค..
 
๊ทธ๋žฌ๋”๋‹ˆ ์ˆ˜์—… ์‹œ๊ฐ„์— ์‹ค์Šต๋ฌธ์ œ
๊ฑฐ์ฆŒ ๋ชป ํ’€์—ˆ๋‹ค ใ…Žใ…Ž
 ๋’ค๋Šฆ๊ฒŒ ํ•˜๋Š” ๋ณต์Šต!!
 
์Šฌ์Šฌ ์–ด๋ ค์›Œ์ง„๋‹ค ~
์ •์‹  ์ฐจ๋ฆฌ์ž
 
 

์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ

Node.js๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์€
http์™€ express๋‘ ๊ฐœ๊ฐ€ ์žˆ๋‹ค.
 
1. httpํ†ต์‹ 
 

 
http๋ชจ๋“ˆ
- ์›น ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™ํ•˜๊ธฐ ์œ„ํ•œ node.js๋‚ด์žฅ ์›น๋ชจ๋“ˆ
 
- server๊ฐ์ฒด, request ๊ฐ์ฒด, response๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
- server๊ฐ์ฒด : ์›น ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ
- response : ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฐ์ฒด
- request ๊ฐ์ฒด : ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฐ์ฒด
 

 

 

ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € : npm

Node Package Manager

๋…ธ๋“œ ํŒจํ‚ค์ง€๋ฅผ ๊ด€๋ฆฌํ•ด ์ฃผ๋Š” ํ‹€

 

npm init

: ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ๋ช…๋ น์–ด

: package.json์— ๊ธฐ๋ก๋  ๋‚ด์šฉ์„ ๋ฌธ๋‹ต์‹์œผ๋กœ ์ž…๋ ฅ

 

npm init --yes

: package.json์ด ์ƒ์„ฑ๋  ๋•Œ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ƒ์„ฑ

 

npm install ํŒจํ‚ค์ง€ ์ด๋ฆ„

: ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ช…๋ น์–ด

 

 

Express

- ์›น ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ

๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋Š” ํ”„๋ ˆ์ž„ ์›Œํฌ

 

- ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ

๊ฐ์ข… ๋ฉ”์„œ๋“œ์™€ ๋ฏธ๋“ค์›จ์–ด ๋“ฑ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค.

 

- http๋ชจ๋“ˆ ์ด์šฉ ์‹œ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๐Ÿ‘‡, ํ™•์žฅ์„ฑ๐Ÿ‘‡

 

์„ค์น˜

: npm install express

 

->  node_modules๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉฐ 

express์— ๊ด€๋ จ๋œ ํด๋”๊ฐ€ ์ƒ์„ฑ

 

 

express ์‚ฌ์šฉ

const express = require("express");
const app = express();
const PORT = 8080;

app.get("/", function (req, res) => {
  res.send("hello express");
});

app.listen(PORT, function () {
  console.log(`http://localhost:${PORT}`);
});

-> express()

: express ๋ชจ๋“ˆ์ด export ํ•˜๋Š” 

์ตœ์ƒ์œ„ ํ•จ์ˆ˜๋กœ, express application์„ ๋งŒ๋“ฆ

 

-> app๊ฐ์ฒด

: express() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•จ์œผ๋กœ์จ 

๋งŒ๋“ค์–ด์ง„ express application

 

-> app๊ฐ์ฒด์˜ method

: http์š”์ฒญ์„ ๊ฐ ์š”์ฒญ์— ๋งž๋Š” 

๊ฒฝ๋กœ๋กœ ์ „์†กํ•˜๋Š” ๋ฉ”์„œ๋“œ(๋ผ์šฐํŒ…)

 

 

๋ฏธ๋“ค์›จ์–ด

 

: ์š”์ฒญ์ด ๋“ค์–ด์˜ด์— ๋”ฐ๋ผ 

์‘๋‹ต๊นŒ์ง€์˜ ์ค‘๊ฐ„ ๊ณผ์ •์„ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌํ•œ ๊ฒƒ

 

 : ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ด์–ด์ฃผ๋Š” ์ค‘๊ฐ„ ์ž‘์—…

 

: use()๋ฅผ ์ด์šฉํ•ด ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค.

 

static

: ์ด๋ฏธ์ง€, cssํŒŒ์ผ ๋ฐ javascriptํŒŒ์ผ๊ณผ ๊ฐ™์€

์ •์  ํŒŒ์ผ ์ œ๊ณต

 

: express์— ์žˆ๋Š” static๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด

๋ฏธ๋“ค์›จ์–ด๋กœ ๋กœ๋“œ

 

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

 

ํ…œํ”Œ๋ฆฟ ์—”์ง„

ejs ํ…œํ”Œ๋ฆฟ

: ๋ฌธ๋ฒ•๊ณผ ์„ค์ •์— ๋”ฐ๋ผ ํŒŒ์ผ์„ htmlํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ๋ชจ๋“ˆ

 

ejs

: embedded javascript์˜ ์•ฝ์ž๋กœ, 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” htmlํŒŒ์ผ

 

: ํ™•์žฅ์ž๋Š”. ejs

 

 

npm install ejs

๋กœํ…œํ”Œ๋ฆฟ์„ ๊น”์•„์คŒ

 

app.set("view engine", "ejs");

 

<% %>

: ๋ฌด์กฐ๊ฑด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€์•ผ ํ•˜๊ณ ,

์ค„ ๋ฐ”๊ฟˆ์„ ํ•  ๊ฒฝ์šฐ์—๋Š” ์ƒˆ๋กœ์šด <% %>๋ฅผ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

<%= %>

: ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•  ๋•Œ ์‚ฌ์šฉ

 

<%- include('view์˜ ์ƒ๋Œ€ ์ฃผ์†Œ')%>

: ๋‹ค๋ฅธ view ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ์‚ฌ์šฉ

 

 

๋™์  form ์ „์†ก

<input type="submit">์ด๋‚˜

<button type="submit">์„ ์ด์šฉํ•ด ์ „์†ก

 

์ „์†ก ์‹œ ํŽ˜์ด์ง€ ์ด๋™์ด ์ผ์–ด๋‚จ!

 

๋™๊ธฐ ๋ฐฉ์‹ 

: ํ•œ ๋ฒˆ์— ํ•˜๋‚˜๋งŒ ์ฒ˜๋ฆฌ

-> ํŽ˜์ด์ง€๋ฅผ ์•„์˜ˆ ์ด๋™ํ•ด ์„œ๋ฒ„๊ฐ€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

 

๋น„๋™๊ธฐ ๋ฐฉ์‹

: ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ

๋‹ค๋ฅธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค!

 

๋น„๋™๊ธฐ httpํ†ต์‹  ๋ฐฉ๋ฒ•

 

1. Ajax

- Asynchronous JavaScript And Xml

 

์žฅ์ 

- jquery๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๊ตฌํ˜„ ๊ฐ€๋Šฅ

- error, success, complete์˜ ์ƒํƒœ๋ฅผ ํ†ตํ•ด

์‹คํ–‰ ํ๋ฆ„์„ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹จ์  

- jquery๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๋งŒ, ๊ฐ„ํŽธํ•˜๊ณ  ํ˜ธํ™˜์„ฑ์ด ๋ณด์žฅ

- promise๊ธฐ๋ฐ˜์ด ์•„๋‹ˆ๋‹ค.

 

์ฝ”๋“œ์˜ ์ฐจ์ด๋Š” get, post์˜ ์ฐจ์ด๋ฟ!

 

2. Axios

- Node.js์™€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์œ„ํ•œ Promise API๋ฅผ ํ™œ์šฉ

- ๋น„๋™๊ธฐ httpํ†ต์‹ ์ด ๊ฐ€๋Šฅ,

return์ด Promise๊ฐ์ฒด๋กœ ์˜จ๋‹ค.

 

์žฅ์ 

- promise๊ธฐ๋ฐ˜

- ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ์ด ๋›ฐ์–ด๋‚จ

 

๋‹จ์ 

- ๋ชจ๋“ˆ ์„ค์น˜ or ํ˜ธ์ถœ์„ ํ•ด์ค˜์•ผ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ

 

get๊ณผ post์˜ ์ฐจ์ด

: get์€ params :data,

post๋Š” data: data

 

3. Fetch  

- ES6๋ถ€ํ„ฐ ๋“ค์–ด์˜จ javascript๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

- Promise๊ธฐ๋ฐ˜

 

์žฅ์ 

- javascript ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฏ€๋กœ

๋ณ„๋„์˜ importํ•„์š” X

- Promise๊ธฐ๋ฐ˜

 

๋‹จ์  

- ์ตœ์‹  ๋ฌธ๋ฒ•

- Timeout๊ธฐ๋Šฅ์ด ์—†๋‹ค.

- ์ƒ๋Œ€์ ์œผ๋กœ Axios์— ๋น„ํ•ด ๊ธฐ๋Šฅ ๋ถ€์กฑ

 

-> post์—๋Š” headers์™€ body๊ฐ€ ์žˆ๋‹ค.

 

response.text() : ์‘๋‹ต์„ ์ฝ๊ณ  ํ…์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜

response.json(): ์‘๋‹ต์„ jsonํ˜•ํƒœ๋กœ ํŒŒ์‹ฑ

 

Axios ๋ฌธ๋ฒ•
axios({
  url: 'ํ†ต์‹ ํ•˜๊ณ ์ž ํ•˜๋Š” ์ฃผ์†Œ',
  method: 'ํ†ต์‹ ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐฉ์‹',
  data: {json ํ˜•ํƒœ์˜ ๋ณด๋‚ด๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ}
 });

url์—๋Š”

form์—์„œ action์— ํ•ด๋‹น

๋‚ด๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ณ ์ž ํ•˜๋Š” ์ฃผ์†Œ

 

method ์—๋Š”

get, post, patch, delete

default๊ฐ’์€ get์ด๋‹ค.

 

data ์—๋Š” 

{key:value, key:value}

put, post, patch์ผ ๋•Œ ์‚ฌ์šฉ

Request์˜ body๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ธ๋‹ค.

 

 

Axios๋ฌธ๋ฒ• - ์‘๋‹ต

 

์‹ค์Šต ๋ฌธ์ œ!!

 

์‹ค์Šต 26. get์œผ๋กœ ์ •๋ณด ๋ฐ›๊ธฐ

26.ejs>

result.ejs>

index.js>

 

์‹ค์Šต 29. axios get ํšŒ์›๊ฐ€์ž…

 

function registerFunc() {
            //ํผ ์„ ํƒํ•˜๊ธฐ
            const form = document.forms['register'];
            console.dir(form);
            console.log(
                document.querySelectorAll("input[name=hobby]:checked").value
            );
            const check = document.querySelectorAll("input[name=hobby]:checked").value;
            check.forEach((value => console.log(value)));

            const data = {
                name: form.name.value,
                gender: form.gender.value,
                hobby: form.hobby.value
            };
            axios({
                url: '/axios',
                method: 'GET',
                params: data,//get์ผ ๋•Œ๋Š” params
            }).then(function (abc) {
                console.log(abc.data);
                const { name, gender, hobby } = abc.data;
                result.textContent = `axios GET : ์ด๋ฆ„์€ ${name}, ์„ฑ๋ณ„์€ ${gender}, ์ทจ๋ฏธ๋Š” ${hobby}`
            });
        }

 

์ด ๋ฌธ์ œ์—์„œ๋Š” name์ด๋ž‘ gender๊ฐ’์€ ์ถœ๋ ฅ์ด ๋˜์—ˆ๋Š”๋ฐ,

hobby๊ฐ’์ด ์ถœ๋ ฅ์ด ๋˜์ง€ ์•Š์•„ ์• ๋ฅผ ๋จน์—ˆ๋‹ค.

๋‚˜์ค‘์— ๋ณด๋‹ˆ ๋‹ค๋ฅธ ์ˆ˜๊ฐ•์ƒ ๋ถ„๋“ค๋„ ๊ทธ๋ ‡๊ณ 

๊ฐ•์‚ฌ๋‹˜๋„ ๊ทธ๋ ‡๊ณ  

๊ทธ ๋ถ€๋ถ„์ด ์ˆœํƒ„ํ•˜๊ฒŒ ์ž˜ ๋˜์ง€๋Š” ์•Š์€ ๋ชจ์–‘์ด๋‹ค.

 

 console.log(
                document.querySelectorAll("input[name=hobby]:checked").value
            );
            const check = document.querySelectorAll("input[name=hobby]:checked").value;

 

์ด ๋ถ€๋ถ„์„ ์ถ”๊ฐ€ํ•ด ์ฃผ๋‹ˆ

์ œ๋Œ€๋กœ ๋™์ž‘ํ•จ!

 

 

์‹ค์Šต 30. axios post ๋กœ๊ทธ์ธ

indes.js>

const id = "banana";
const pw = "4321";

app.post("/login", (req, res) => {
  console.log(req.body);
  if (req.body.id !== id) {
    res.send({ result: false });
  }
  if (req.body.id === id && req.body.pw === pw) {
    res.send({ result: true, userInfo: req.body });
  } else {
    res.send({ result: false });
  }
});

index.ejs>

 if (form.userId.value === "" || form.userPw.value === "") {
                result.textContent = `์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”`;
                return;
            }
            axios({
                method: "POST",
                url: "/login", //api์ฃผ์†Œ // endpoint
                data: {
                    id: form.userId.value,
                    pw: form.userPw.value,
                },
            }).then((res) => {
                console.log(res);
                console.log(res.data);
                if (res.data.result === true) {
                    result.textContent = `๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•˜์˜€์Šต๋‹ˆ๋‹ค.`;
                    result.style.color = "blue";
                } else {
                    result.textContent = `๋กœ๊ทธ์ธ์— ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค`;
                    result.style.color = "red";
                }
            });

 

ํŒŒ์ผ ์—…๋กœ๋“œ

ํ•„์š”ํ•œ ๊ฒƒ 1. 

body-parser

- ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

- post๋กœ ์ •๋ณด๋ฅผ ์ „์†กํ•  ๋•Œ, ์š”์ฒญ์˜ body๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์คŒ

- ๋‹จ, ๋ฉ€ํ‹ฐ ํŒŒํŠธ ๋ฐ์ดํ„ฐ(์ด๋ฏธ์ง€, ๋™์˜์ƒ, ํŒŒ์ผ ๋“ฑ)๋ฅผ 

์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•ด, multer๋ฅผ ์ด์šฉํ•œ๋‹ค.

 

app.use(express.urlencoded({extended: true}));
app.use(express.json());

 

multer

: ํด๋ผ์ด์–ธํŠธ -> ์„œ๋ฒ„๋กœ 

ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

- ํŒŒ์ผ ์—…๋กœ๋“œ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ฏธ๋“ค ์›จ์–ด

 

- express๋กœ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ

๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฏธ๋“ค์›จ์–ด

 

 

multer ์„ค์น˜>

npm install multer //multer์„ค์น˜ํ•˜๊ธฐ
const multer = require('multer');

ํด๋ผ์ด์–ธํŠธ ์ค€๋น„ >

<form action="/upload" method="POST" enctype="multipart/form-data">

enctype ์†์„ฑ์œผ๋กœ๋Š” 

"multipart/form-data" ๋ฐ˜๋“œ์‹œ ์„ค

 

ํŒŒ์ผ ์—…๋กœ๋“œ ๊ฒฝ๋กœ ์„ค์ •>

const multer = require('multer');
const upload = multer({
  dest : 'uploads/',
 });

dest : ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๊ณ 

๊ทธ ํŒŒ์ผ์ด ์ €์žฅ๋  ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๋Š” ์†์„ฑ

 

ํŒŒ์ผ ์—…๋กœ๋“œ>

<input type="file" name="userfile">

ํ•˜๋‚˜์˜ ํŒŒ์ผ ์—…๋กœ๋“œ>

single() : ํ•˜๋‚˜์˜ ํŒŒ์ผ ์—…๋กœ๋“œ

<h4>์‹ฑ๊ธ€ ํŒŒ์ผ ์—…๋กœ๋“œ</h4>
    <form action="/upload" method="POST" enctype="multipart/form-data">
        <input type="file" name="fileName" />
        <input type="text" name="title">
        <button type="submit">์—…๋กœ๋“œ</button>
    </form>
app.post("/upload", uploadDetail.single("fileName"), function (req, res) {
  console.log(req.file);
  console.log(req.body);
  res.send("ํŒŒ์ผ์—…๋กœ๋“œ");
});

 

ํŒŒ์ผ ์—ฌ๋Ÿฌ ๊ฐœ ์—…๋กœ๋“œ>

array(): ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•  ๋•Œ ์‚ฌ์šฉ,

ํ•˜๋‚˜์˜ ์š”์ฒญ ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ์ผ์ด ์กด์žฌ

 

<h4>์—ฌ๋Ÿฌ๊ฐœ ํŒŒ์ผ ์—…๋กœ๋“œ</h4>
    <form action="/upload/array" method="POST" enctype="multipart/form-data">
        <input type="file" name="fileName" multiple />
        <button type="submit">์—…๋กœ๋“œ</button>
    </form>
app.post("/upload/array", uploadDetail.array("fileName"), (req, res) => {
  res.send("๋ฉ€ํ‹ฐ ํŒŒ์ผ ์—…๋กœ๋“œ");
});

 

์—ฌ๋Ÿฌ๊ฐœ ๊ฐ๊ฐ ํŒŒ์ผ ์—…๋กœ๋“œ>

<h4>์—ฌ๋Ÿฌ๊ฐœ ๊ฐ๊ฐ ํŒŒ์ผ์—…๋กœ๋“œ</h4>
    <form action="/upload/fields" method="POST" enctype="multipart/form-data">
        <input type="file" name="fileName1" />
        <br />
        <input type="file" name="fileName2" />
        <input type="submit" value="์—…๋กœ๋“œ" />
    </form>
app.post(
  "/upload/fields",
  uploadDetail.fields([{ name: "fileName1" }, { name: "fileName2" }]),
  (req, res) => res.send("๊ฐ๊ฐ ๋ฉ€ํ‹ฐ ํŒŒ์ผ ์—…๋กœ๋“œ")
);

 

multer ์ •๋ฆฌ>

 

- single() : ํ•˜๋‚˜์˜ ํŒŒ์ผ ์—…๋กœ๋“œ

req.file : ํŒŒ์ผ ํ•˜๋‚˜

req.body : ๋‚˜๋จธ์ง€ ์ •๋ณด

 

- array() : ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•  ๋•Œ ์‚ฌ์šฉ,

ํ•˜๋‚˜์˜ ์š”์ฒญ ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ์ผ์ด ์กด์žฌ

req.files : ํŒŒ์ผ n ๊ฐœ

req.body : ๋‚˜๋จธ์ง€ ์ •๋ณด

 

- field() : ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•  ๋•Œ ์‚ฌ์šฉ,

ํ•˜๋‚˜์˜ ์š”์ฒญ์ด ์•„๋‹Œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ

req.files : ํŒŒ์ผ n ๊ฐœ

req.body : ๋‚˜๋จธ์ง€ ์ •๋ณด

 

Axios ๋™์  ํŒŒ์ผ ์—…๋กœ๋“œ

 

์š”๋Ÿฐ ์ƒํƒœ ๋งŒ๋“ค๊ธฐ!

 

 function upload() {
            //form์„ ๋™์ ์œผ๋กœ ์ œ์–ด
            const formData = new FormData();
            const file = document.getElementById('dynamicUpload');
            formData.append("dynamicUpload", file.files[0]);
            console.log(file.files[0]);

            axios({
                method: "POST",
                url: "/dynamic",
                data: formData,
                headers: {
                    'Content-Type': 'multipart/form-data'
                },
            }).then(function (res) {
                console.log(res);
                const img = document.querySelector("#img");
                img.setAttribute("src", res.data.path);
            });
        }
app.post("/dynamic", uploadDetail.single("dynamicUpload"), function (req, res) {
  console.log(req.file);
  res.send(req.file);
});

 

 

ํŒŒ์ผ ์—…๋กœ๋“œ ์‹ค์Šต

 

 

์ฝ”๋“œ ์ผ๋ถ€๋งŒ!

        <button type="button" onClick="upload()">ํšŒ์›๊ฐ€์ž…</button>

           axios({
                url: '/axios',
                method: 'GET',
                params: data,//get์ผ ๋–„๋Š” params
            }).then(function (abc) {
                console.log(abc.data);
                const { id, pw, name, age } = abc.data;
                result.textContent = `์•„์ด๋”” : ${id} ๋น„๋ฐ€๋ฒˆํ˜ธ : ${pw}, ์ด๋ฆ„ : ${name}, ๋‚˜์ด : ${age}`
            }); 
            axios({
                method: "POST",
                url: "/dynamic",
                data: formData,
                headers: {
                    'Content-Type': 'multipart/form-data'
                },
            }).then(function (res) {
                console.log(res);
                const img = document.querySelector("#img");
                img.setAttribute("src", res.data.path);
            });

 

ํ•จ์ˆ˜ upload()๋ฅผ ์ž‘์„ฑํ•  ๋•Œ, 

upload ํ•จ์ˆ˜๋ฅผ ๋‘ ๊ฐœ ๋งŒ๋“ค์–ด

๊ธ€์ž ์ถœ๋ ฅํ•˜๊ธฐ, ๊ทธ๋ฆผ ์ถœ๋ ฅํ•˜๊ธฐ๋กœ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ

๊ทธ๋ ‡๊ฒŒ ํ•˜๋‹ˆ ์‚ฌ์ง„๋งŒ ์ถœ๋ ฅ๋˜๊ณ  ๊ธ€์ž๋Š” ์ถœ๋ ฅ์ด ์•ˆ๋˜์—ˆ๋‹ค. 

 

ํ•จ์ˆ˜ ํ•˜๋‚˜์— ๊ธ€์ž, ๊ทธ๋ฆผ ๋‘˜ ๋‹ค ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก 

์ฝ”๋“œ๋ฅผ ์งฐ๋‹ค!

 

ํ•จ์ˆ˜๋ฅผ ๋‘ ๊ฐœ ์„ ์–ธํ•˜๋Š” ๊ฑด 

๋ง๋„ ์•ˆ ๋˜์ง€..

๊ทผ๋ฐ ํ•จ์ˆ˜ ๋ช…์ด ๊ฐ™๊ฒŒ ํ•ด์„œ

ํ•จ์ˆ˜ ๋‘ ๊ฐœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ๋„ ์žˆ์ง€ ์•Š๋‚˜?

๊ทธ๋Ÿฐ ๊ฒŒ ์žˆ์—ˆ๋‚˜?..

์ฐพ์•„๋ด์•ผ์ง€..

 

 

์•”ํŠผ ํšŒ์› ๊ฐ€์ž… ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด

์ด๋ ‡๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค!

 


 

 

๊ทธ๋ฆฌ๊ณ  


4์ฃผ ์ฐจ์˜ ์ผ์ƒ ~..
 
์ •์ฒ˜๊ธฐ ํ•„๊ธฐ ํ›„๊ธฐ..

 
๋ฏธ๋ฆฌ๋ฏธ๋ฆฌ ๊ณต๋ถ€ ์•ˆ ํ•œ ์ž์˜ ์ตœํ›„..

๋ˆˆ๋ฌผ ์ –์€ ์–ด๋А ์ƒˆ๋ฒฝ์˜ ์‚ผ๊ฐ๊น€๋ฐฅ์ด์—ˆ๋‹ค..
(์‚ฌ์‹ค ๋˜ฅ์ค„ ํƒ€์„œ ๋ˆˆ๋ฌผ๋„ ์•ˆ ๋‚˜์˜ด)
 
๊ฒฐ๊ณผ๋Š” ํ•ฉ๊ฒฉ ^^ 
๊ฐ€๋ฒผ์šด ๋ฐœ๊ฑธ์Œ์œผ๋กœ
์„œ์šธ ์ด๋ชจ๋„ค ์ง‘์„ ๋†€๋Ÿฌ ๊ฐ”๋‹ค
 

 

์ด๋ชจ๋„ค ์ง‘์€ 
์•„์ฃผ ๋”ฐ๋œปํ–ˆ๋‹ค..
 

 
๋ฐฅ ๋จน๊ณ  ์ด๋ชจ ์†์— ์ด๋Œ๋ ค
์žฅ๋ฏธ ์ถ•์ œ๊นŒ์ง€ ์•ผ๋ฌด์ง€๊ฒŒ ๋ณด๊ณ  ์™”๋‹ค..
์ „๋‚  ๋ฐค์ƒˆ์„œ ๋‹น์žฅ์ด๋ผ๋„ ์ง‘ ๊ฐ€์„œ ์ž๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ
 
์ด๋ชจ : ์ง€ํ˜„์•„ ~~ ์—ฌ๊ธฐ ์„œ๋ด~~
๋‚˜ : ์ด๋ชจ.. ๋‚œ ๊ดœ์ฐฎ..
์ด๋ชจ : ๋นจ๋ฆฌ ~~


๋‚˜ : ์ด์ œ ์ง‘..
์ด๋ชจ : ์šฐ๋ฆฌ ์ €๊ธฐ๋„ ๊ฐ€๋ณผ๊นŒ??~
์‚ฌ์ง„๋งŒ ๊ฑฐ์ฆŒ ๋ฐฑ์žฅ ์ฐ์—ˆ๋‚˜..
 
์‚ฌ๋žŒ์ด ํ•˜๋„ ๋งŽ์•„์„œ ์‚ฌ๋žŒ์„ ๋ณธ ๊ฑด์ง€ 
๊ฝƒ์„ ๋ณธ๊ฑด์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ
์—„์ฒญ ์ž˜ํ•ด๋†“๊ธด ํ–ˆ๋‹ค!
๊ฝƒ์— ๊ฐํฅ ์—†๋Š” ๋‚˜๋„ 
๊ฒฝ์น˜์— ๋†€๋ž๋‹ค
 
 

 
๊ทธ๋ฆฌ๊ณ  4์ฃผ ์ฐจ์— ๋จน์€ ์Œ์‹๋“ค..
๋ชจ์•„๋‘๋‹ˆ ๋‚˜ ๋ญ ๋งŽ์ด ๋จน๊ณ  ๋‹ค๋…”๋„ค
 
๋‚˜๋ฆ„ ์ž˜ ์‚ด๊ณ  ์žˆ๋Š” ๋“ฏํ•˜๋ฉด์„œ๋„
์•„์ง์€ ๊ทธ๋ฆฌ ํŽธํ•˜์ง„ ์•Š์€ ๊ฒƒ ๊ฐ™๋‹ค..
์‹ฌ์ ์œผ๋กœ ใ…‹
์ทจ์ค€์ƒ ์ด๊ฑฐ ์ฐธ ํž˜๋“  ์ด์ด๊ตฌ๋งŒ~
์ง‘ ๊ฐ€๊ณ ํŒŒ~~
 
๊ทธ๋ ‡์ง€๋งŒ ๋‚ด๊ฐ€ ํ•˜๊ธฐ๋กœ ํ•œ ์ผ์ด๋‹ˆ

ํ•ด์•ผ์ง€ ๋ญ ์–ด์งธ~..
 
๋‹ค์Œ ์ฃผ๋„

์—ด์‹ฌํžˆ ๊ณต๋ถ€ํ•˜๊ณ ..
์—ด์‹ฌํžˆ ์ž˜ ์ฑ™๊ฒจ ๋จน์œผ๋ฉด์„œ..
์ž˜ ์‚ด์•„๋ณด์ž~..
์ง€ํ˜„์•„ ์•„์ž์•„์ž ~...