์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ์ฝ๋ฉํ ์คํธ
- ๋๋ฆผ์ฝ๋ฉ
- ๋ ธ๋ง๋์ฝ๋
- CSS
- fe
- Til
- KDT
- ๋ชจ๊ฐ์ฝ
- ํ ์ดํ๋ก์ ํธ
- ๊ตญ๋น์ง์
- ํ๋ก ํธ์๋
- ํฌ๋กค๋ง
- ๊ฐ๋ฐ
- error
- HTML
- Python
- react
- ๊ทธ๋ฆฌ๋
- ํ์ด์ฌ
- ํ๋ก๊ทธ๋๋จธ์ค
- ์๊ณ ๋ฆฌ์ฆ
- ํ๋ก์ ํธ
- javascript
- heapq
- node.js
- ๋ฐฑ์ค
- JS
- mongodb
- ์ฝ๋ฉ
- ์ฝ๋ฉ์ ํ
- Today
- Total
๐ฑ → ๐ณ
[node.js] ํ๋ ์์ํฌ ์์ด CRUD ๊ตฌํํด๋ณด๊ธฐ ๋ณธ๋ฌธ
๐ CRUD (Create, Read, Update, Delete)
Create -> post
read -> get
update -> put
delete -> delete
๐req, res
req(uire) : ๋ธ๋ผ์ฐ์ ์์ ๋ค์ด์จ ์์ฒญ
res(ponse): ์์ฒญ์ ๋ฐ๋ฅธ ์๋ฒ์ ์๋ต
๐ nodemon ์ฌ์ฉ
"scripts": {
"server": "nodemon js/main.js",
"dev": "nodemon --watch \"./js/*.js\" --exec \"npm run server\""
},
package.json ํ์ผ ์์
sass ์ฒ๋ผ ํน์ ํ์ผ์๊ฒ --watch ๊ฑธ์ด ์ค ์๋ ์์
๋ณํ๊ฐ ์ผ์ด๋๋ฉด --exec ์ต์ ์ผ๋ก ๋ช ๋ น์ด ์คํ ๊ฐ๋ฅ
๐ HTTPie
์๋ฒ์์ post ์์ฒญ
โ ์ฝ๋ ์ ์ฒด ํ๋ฆ
// @ts-check
const http = require('http');
const posts = [
{
id: 1,
title: '์ฒซ๋ฒ์งธ ๋ธ๋ก๊ทธ ๊ธ',
content: '์ฒซ๋ฒ์งธ ๋ด์ฉ์
๋๋ค',
},
{
id: 2,
title: '๋๋ฒ์งธ ๋ธ๋ก๊ทธ ๊ธ',
content: '๋๋ฒ์งธ ๋ด์ฉ์
๋๋ค',
},
];
const server = http.createServer((req, res) => {
console.log('@@@', req.url);
// req.url์ด ์กด์ฌํ๋ฉด req.url.split('/'), ์กด์ฌํ์ง ์์ผ๋ฉด ๋น๋ฐฐ์ด ์ ์ธ
const urlArr = req.url ? req.url.split('/') : [];
let id = '-1';
if (urlArr.length > 2) {
[, , id] = urlArr;
// id = urlArr[2];
}
// console.log(urlArr);
// console.log(urlArr[2]);
/**
* GET /posts ๋ชฉ๋ก ๊ฐ์ ธ์ค๊ธฐ
* GET /posts/:id ํน์ ๊ธ ๋ด์ฉ ๊ฐ์ ธ์ค๊ธฐ
* POST /posts ์๋ก์ด ๊ธ ์ฌ๋ฆฌ๊ธฐ
* PUT /posts/:id ํน์ ๊ธ ๋ด์ฉ ์์ ํ๊ธฐ
* DELETE /posts/:id ํน์ ๊ธ ์ญ์ ํ๊ธฐ
*/
if (req.url === '/posts' && req.method === 'GET') {
const result = {
posts: posts.map((post) => ({
id: post.id,
title: post.title,
})),
// ์ ์ฒด ๊ธ ์ return
totalCount: posts.length,
};
// response header ์ค์
res.setHeader('Content-Type', 'application/json', 'charset = utf-8');
res.statusCode = 200;
res.end(JSON.stringify(result));
console.log('๋ธ๋ก๊ทธ์ ๊ธ ๋ชฉ๋ก์ ๊ฐ์ ธ์ค๋ API ์
๋๋ค.');
} else if (urlArr[1] === 'posts' && req.method === 'GET') {
res.statusCode = 200;
console.log('๋ธ๋ก๊ทธ์ ํน์ ๊ธ ๋ด์ฉ์ ๋ณด์ฌ์ฃผ๋ API ์
๋๋ค.');
} else if (req.url === '/posts' && req.method === 'POST') {
res.statusCode = 200;
console.log('๋ธ๋ก๊ทธ์ ์๋ก์ด ๊ธ์ ์ฌ๋ฆด ๋ ํธ์ถํ API ์
๋๋ค');
} else if (urlArr[1] === 'posts' && req.method === 'PUT') {
res.statusCode = 200;
console.log('๋ธ๋ก๊ทธ์ ๊ธ์ ์์ ๋ ํธ์ถํ API ์
๋๋ค');
} else if (urlArr[1] === 'posts' && req.method === 'DELETE') {
res.statusCode = 200;
console.log('๋ธ๋ก๊ทธ์ ๊ธ์ ์ญ์ ๋ ํธ์ถํ API ์
๋๋ค');
} else {
res.statusCode = 400;
res.end('Not Found');
console.log('ํด๋น API๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.');
}
// ์๋ฒ๊ฐ ์ ์์ผ ๋ 200์ด๋ผ๋ ์ฝ๋๋ฅผ ๋ด๋ณด๋
// res.statusCode = 200;
// res.end('hello, back-end');
});
const PORT = 4000;
server.listen(PORT, () => {
console.log(`ํด๋น ์๋ฒ๋ ${PORT}๋ฒ ํฌํธ์์ ์๋ ์ค์
๋๋ค.`);
});
โ Read -> GET ๊ตฌํ (๋ชฉ๋ก ๊ฐ์ ธ์ค๊ธฐ)
์ ์ผ ์ ์ฝ๋์์ GET ๋ถ๋ถ ์์
if (req.url === '/posts' && req.method === 'GET') {
const result = {
posts: posts.map((post) => ({
id: post.id,
title: post.title,
})),
// posts: posts,
// ์ ์ฒด ๊ธ ์ return
totalCount: posts.length,
};
res.statusCode = 200;
// JSON ํํ๋ก ์ฝ์ ์ ์๋ ๋ฌธ์์ด๋ก ๋ฐ๊ฟ์ ์ ๋ฌํด์ค
res.end(JSON.stringify(result));
console.log('๋ธ๋ก๊ทธ์ ๊ธ ๋ชฉ๋ก์ ๊ฐ์ ธ์ค๋ API ์
๋๋ค.');
}
โ Read -> GET ๊ตฌํ (ํน์ id ๊ฐ์ ๊ฐ์ง๋ ๊ธ ๊ฐ์ ธ์ค๊ธฐ)
ํน์ id ๊ฐ์ ๊ฐ์ง๋ ๊ธ์ ์ ๋ณด๋ฅผ ๋ชจ๋ ๊ฐ์ ธ์ฌ ์ ์๋ค
๋ฐฐ์ด์ find method๋ฅผ ์ด์ฉํ์ฌ id๊ฐ ๊ฒน์น๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์์ ๋ฐํ
๋จ, ํด๋น id ๊ฐ์ ๊ฐ์ง๋ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ 404 err ์ถ๋ ฅ(์์ธ ์ฒ๋ฆฌ)
id ๊ฐ์ number๋ก ํ๊ธฐ๋ก ํ์ผ๋ id๋ฅผ ๋ถ๋ฆฌํ๋ ์ฝ๋ ์์
์ ์ผ ์ ์ฝ๋์์ GET(else if (id !== -1 && req.method === 'GET')) ๋ถ๋ถ ์์
else if (id !== -1 && req.method === 'GET') {
const result = posts.find((post) => post.id === id);
if (result) {
res.statusCode = 200;
res.end(JSON.stringify(result));
console.log('๋ธ๋ก๊ทธ์ ํน์ ๊ธ ๋ด์ฉ์ ๋ณด์ฌ์ค API ์
๋๋ค');
console.log(`Post ID ๊ฐ์ ${id} ์
๋๋ค`);
} else {
res.statusCode = 404;
res.end('ํฌ์คํธ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.');
console.log('ํฌ์คํธ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.');
}
}
โ Create -> POST ๊ตฌํ
์ ์ผ ์ ์ฝ๋์์ POST ๋ถ๋ถ ์์
else if (req.url === '/posts' && req.method === 'POST') {
req.setEncoding('utf-8');
req.on('data', (data) => {
const newPost = JSON.parse(data);
// posts.push(newPost);
posts.push({
id: posts[posts.length - 1].id + 1,
title: newPost.title,
content: newPost.content,
});
});
res.statusCode = 200;
res.end('์๋ก์ด ๊ธ์ด ๋ฑ๋ก ๋์์ต๋๋ค.');
console.log('๋ธ๋ก๊ทธ์ ์๋ก์ด ๊ธ์ ์ฌ๋ฆด ๋ ํธ์ถํ API ์
๋๋ค');
}
โ Update -> PUT ๊ตฌํ(๊ธฐ์กด ํฌ์คํธ ์์ ํ๊ธฐ)
์ ์ผ ์ ์ฝ๋์์ PUT ๋ถ๋ถ ์์
else if (id !== -1 && req.method === 'PUT') {
req.setEncoding('utf-8');
req.on('data', (data) => {
const updatePost = JSON.parse(data);
updatePost.id = id;
posts[id - 1] = updatePost;
});
res.statusCode = 200;
res.end(`์์ ๋ ํฌ์คํธ์ id๋ ${id}๋ฒ ์
๋๋ค.`);
console.log('๋ธ๋ก๊ทธ์ ๊ธ์ ์์ ๋ ํธ์ถํ API ์
๋๋ค');
}
โ DELETE ๊ตฌํ(๊ธฐ์กด ํฌ์คํธ ์ญ์ ํ๊ธฐ)
์ ์ผ ์ ์ฝ๋์์ DELETE ๋ถ๋ถ ์์
else if (id !== -1 && req.method === 'DELETE') {
// index id-1์ธ ๊ฐ ํ๋๋ง ์ง์
posts.splice(id - 1, 1);
res.statusCode = 200;
res.end(`id ${id}๋ฒ์ธ ํฌ์คํธ๋ฅผ ์ญ์ ํ์ต๋๋ค`);
console.log('๋ธ๋ก๊ทธ์ ๊ธ์ ์ญ์ ๋ ํธ์ถํ API ์
๋๋ค');
}
โ ์์ธ์ฒ๋ฆฌ
else {
res.statusCode = 400;
res.end('Not Found');
console.log('ํด๋น API๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.');
}
ํ๋ ์์ํฌ์ ๊ฐ์ฌํจ.... ใ ใ ...
'Server > Node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[node.js] URL ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ๋ฐฉ๋ฒ (0) | 2022.09.02 |
---|---|
[node.js] Yarn์ด๋? (0) | 2022.09.02 |
[node.js] class VS ์์ฑ์ ํจ์ (0) | 2022.08.26 |
[node.js] GET ์์ฒญ ์ฒ๋ฆฌ (1) | 2022.08.25 |
mac์์ node.js ๊ฐ๋ฐ ํ๊ฒฝ ์ธํ (0) | 2022.08.24 |