์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- heapq
- ๋๋ฆผ์ฝ๋ฉ
- ๊ตญ๋น์ง์
- ๊ทธ๋ฆฌ๋
- ๋ชจ๊ฐ์ฝ
- ๊ฐ๋ฐ
- KDT
- ๋ ธ๋ง๋์ฝ๋
- CSS
- HTML
- fe
- mongodb
- ํ๋ก์ ํธ
- react
- ํ ์ดํ๋ก์ ํธ
- ์๊ณ ๋ฆฌ์ฆ
- ์ฝ๋ฉ
- ํ์ด์ฌ
- ํ๋ก ํธ์๋
- ์ฝ๋ฉ์ ํ
- error
- ํฌ๋กค๋ง
- Python
- ์ฝ๋ฉํ ์คํธ
- node.js
- JS
- ๋ฐฑ์ค
- ํ๋ก๊ทธ๋๋จธ์ค
- Til
- javascript
- Today
- Total
๐ฑ → ๐ณ
[node.js] Front์์ Back์ผ๋ก ๋ฐ์ดํฐ ์ ์ก ๋ณธ๋ฌธ
front์ form์ผ๋ก back์๊ฒ ๋ฐ์ดํฐ ๋ณด๋ด๊ธฐ
- form
- XMLHttpRequest
- Jquery
- Fetch()
๐ users.ejs์ form ์ถ๊ฐ
๐form
- action : ๋ณด๋ด๊ณ ์ ํ๋ ์ฃผ์ ๊ฐ
- method: ๋ณด๋ด๋ method ์ค์ (get, post ๋ง ๊ฐ๋ฅ)
- input์ name ์์ฑ์ ์๋ฒ์์ ๋ฐ์ ๋ ํ๋ ๊ฐ์ด ๋จ
- ๋ฒํผ type์ผ๋ก submit์ ํ๋ฉด ํด๋น ํผ์ ๋ด์ฉ์ ์ง์ ํ ๋ฐฉ์ + ์ฃผ์๋ก ์ ๋ฌ
<form action="/users" method="POST">
<div>
<label>์์ด๋</label>
<input type="text" name="id" />
</div>
<div>
<label>์ด๋ฆ</label>
<input type="text" name="name" />
</div>
<div>
<label>์ด๋ฉ์ผ</label>
<input type="email" name="email" />
</div>
<button type="submit">Submit</button>
</form>
โ body-parser ๋ชจ๋ ์ฌ์ฉ
: form์์ ์ ์ก ๋, ์ ๋ณด๋ฅผ req.body์ ๋ด์์ obj๋ก ์ ๋ฌํด์ฃผ๋ ์ญํ
body-parser๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์๋์ ๊ฐ์ ์ฝ๋๋ก ๋ฐ์ดํฐ๋ฅผ body์ ๋ฃ์ ๋ค์,
์ธ์ฝ๋ฉ์ฒ๋ฆฌ๊น์ง ํด์ค์ผํจ (body-parser๋ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ค)
req.on('data', function(chunk) { body += chunk; });
โ๏ธ body-parser ์ค์น ๋ฐ ์ฌ์ฉ
npm install body-parser --save
body-parser๋ ์ค์ ๋ก ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌํ ์ํ์์๋ ์๋ฒ ํต์ ์ ์ฌ์ฉ๋๋ฏ๋ก
--save-dev๊ฐ ์๋ --save ์ต์ ์ผ๋ก ์ค์นํด์ผ ํจ
// app.js
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
json()์ jsonํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค๋ ์๋ฏธ
urlencoded(url-encoded) ์ต์ ์ url์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๋ฉด
localhost:4000/posts?title=title&content=content ํด๋น ๋ฐ์ดํฐ๋ฅผ json ํํ { “title”: “title, “content”: “content” } ๋ผ๊ณ ์ ๋ฌํจ
๐ extended: false
- query๋ก ๋ค์ด์จ ๋ฌธ์์ด์
- true: ์ธ๋ถ ๋ชจ๋์ธ qs ๋ชจ๋๋ก ์ฒ๋ฆฌ(qs ๋ชจ๋ ์ค์น ํ์, npm i qs)
- false: express ๋ด์ฅ ๋ชจ๋์ธ queryString ๋ชจ๋๋ก ์ฒ๋ฆฌ
- false ์ต์ ์ ์ค์ฒฉ๋ ๊ฐ์ฒด ํ์ฉ X
โ๏ธ body-parser, express์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ผ๋ก ์ถ๊ฐ ๋จ
// app.js
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
๋จ, express 4.16 ์ด์์์๋ง ์ง์ํจ
๐ XMLHttpRequest
- 1999๋ ํด๋ผ์ด์ธํธ์์ ์๋ฒ ์ธก ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ธฐ ์ํด ํ์
- ์๋ ๋ฐฉ์ -> ์ต์ ๊ธฐ๋ฅ์ธ promise ๋ฑ์ ๊ธฐ๋ณธ์ผ๋ก ๋ด์ฅํ์ง ๋ชปํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์๋ฒ ํต์ ์ ๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ ํ๋ ค๋ฉด ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ์ธํ๋ฉด, promise๋ฅผ ๋ฐ๋ก ์ฌ์ฉํด์ผ ํ๋ ๋ถํธํจ ์กด์ฌ
- ES6 ๋ฌธ๋ฒ์ด ๋ฑ์ฅํ๊ธฐ ์ ๊น์ง๋ ์ฃผ๋ก JQuery๋ฅผ ํตํด ํต์ ํจ
<script>
function deleteUser(id) {
const xhr = new XMLHttpRequest();
xhr.open('DELETE', `http://localhost:4000/users/${id}`);
xhr.responseType = 'json';
xhr.onload = () => {
console.log(xhr.response);
location.reload();
};
xhr.send();
}
</script>
๐ JQuery
: JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ
2006๋ ๋ฑ์ฅํ์ฌ ํธ๋ฆฌํ DOM ๊ธฐ๋ฅ, ๋ฐ์ดํฐ ํต์ ๋ฑ ๋ค์ํ ๋ถ์ผ์์ ์ฌ์ฉ
JQuery ์ ๊ธฐ๋ฅ๋ค์ด JS ์ ๊ธฐ๋ณธ ๋ด์ฅ ๋๋ฉด์ ์ ์ฐจ ์ฌ์ฉ์ด ์ค์ด๋๋ ์ถ์ธ
<script>
function deleteUser(id) {
console.log(`http://localhost:4000/users/${id}`);
$.post(`http://localhost:4000/users/${id}`, function (res) {
console.log(res);
location.reload();
}).done(function (data) {
console.log(data);
}).fail(function (err) {
console.log(err);
})
}
</script>
๐ Fetch
๋ธ๋ผ์ฐ์ ์์ ์๋ฒ ์ฌ์ดํธ ํต์ ์ ์ํด 2015๋ ES6์์ ์ถ๊ฐ๋ ๊ธฐ๋ฅ
๊ธฐ์กด์ XMLHttpRequest์ ๋ฌธ์ ์ ์ ๊ฐ์ ํ๊ณ Promise๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ๋ด์ฅํ์ฌ ์๋ฒ ํต์ ์ฝ๋๋ฅผ ๋ฒก์๋ ์ฝ๋์ ๋น์ทํ๊ฒ ์งค ์ ์์
<script>
function deleteUser(id) {
fetch(`http://localhost:4000/users/${id}`, {
method: 'delete',
headers: {
'Content-type': 'application/json'
},
}).then((res) => {
console.log(res);
location.reload();
})
}
</script>
โ๏ธ Fetch๋ฅผ ์ด์ฉํ์ฌ ์ญ์ ๊ธฐ๋ฅ ๊ตฌํ
์ญ์ ๊ธฐ๋ฅ ์์ฒด๋ ์ด๋ฏธ back-end api์ ์ ๊ตฌํ๋์ด ์์ผ๋ฏ๋ก
front์์๋ fetch๋ฅผ ์ด์ฉํ์ฌ back-end์ ์์ฒญ๋ง ์ ๋ณด๋ด๋ฉด ๋จ
li ์์์ ์ญ์ ๋ฒํผ ์ถ๊ฐ ํ
<a> tag์ onclick์ผ๋ก ์ญ์ ํจ์ ์ฐ๊ฒฐ -> ํด๋น ํจ์์์ fetch๋ก ์ญ์ api ์์ฒญ
<ul>
<% if(userCounts> 0) { %>
<% for(let i=0; i < userCounts; i++) { %>
<li>
<p>ID: <%= USER[i].id %>
</p>
<p>์ด๋ฆ: <%= USER[i].name %>
</p>
<p>email: <%= USER[i].email %>
</p>
<!-- ์ญ์ ํ user.id ๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ -->
<a href="" onclick="deleteUser('<%= USER[i].id %>');">์ญ์ </a>
</li>
<% } %>
<% } else { %>
<li>
ํ์ ์ ๋ณด๊ฐ ์์ต๋๋ค!
</li>
<% } %>
</ul>
๐ deleteUser() ํจ์ ๊ตฌํ
fetch์ ์ฃผ์๋ก๋ ๋งค๊ฐ ๋ณ์๋ก ๋ฐ์ id๊ฐ ๋ฃ์ด์ ์ ๋ฌ
์ ๋ฌ ๊ฐ์ผ๋ก๋ method, headers๋ฅผ ์ ๋ฌ (๋ฐ์ดํฐ ์ ๋ฌ์ด ํ์ํ๋ฉด body์ ๋ด์์ ์ ๋ฌ)
ํต์ ์ด ์๋ฃ๋๋ฉด then์ผ๋ก ๋ฐ์
function deleteUser(id) {
fetch(`http://localhost:4000/users/${id}`, {
method: 'delete',
headers: {
'Content-type': 'application/json'
},
}).then((res) => {
console.log(res);
location.reload();
})
}
'Server > Node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[node.js] Session์ผ๋ก ๋ก๊ทธ์ธ ๊ตฌํํ๊ธฐ (0) | 2022.09.24 |
---|---|
[node.js] Cookie - ํ์ ์ฐฝ ํ๋ฃจ๋์ ๋ณด์ง ์๊ธฐ (0) | 2022.09.24 |
[node.js] Error Handling (1) | 2022.09.24 |
[node.js] View Engine(ejs, pug, nunjucks) (0) | 2022.09.24 |
[node.js] File-System(promise, async/await) (0) | 2022.09.24 |