๊ธ ๋ชฉ๋ก ๋ง๋ค๊ธฐ
์ ์ฅ๋ data๋ฅผ ์ฝ์ด์ค๋ ๋ฒ
*GET์ ๋ํ ๋ผ์ฐํธ
app.get('/topic', function(req, res){ // get ๋ฐฉ์์ผ๋ก /topic ๋ผ์ฐํธ fs.readdir('data', function(err, files){ if(err){ res.status(500).send('Internal Server Error'); } res.render('view', {topics: files}); }) })
ํ
ํ๋ฆฟ์์ง์ ์ด์ฉํ๋ค
app.set('views', './views_file');
app.set('view engine', 'pug');
์ ์์
์์ ์์ฑํ๋ ์ด ์ฝ๋๊ฐ ์์ด์ผ ํจ
readdir์ ์ด์ฉํด์ data๋ฅผ ์ฝ์ด์จ๋ค
๊ทธ๋ callback ํจ์๋ err์ file ๋ชฉ๋ก(files=๋ฐฐ์ด)์ ์ ๋ฌ๋ฐ๋๋ค
js ํ์ผ์์ pug๋ก ์ ๋ณด๋ฅผ ์ ๋ฌํ ๋
render๋ฅผ ์ด์ฉํด์ res.render('view', {topics: files}); ์ด๋ ๊ฒ ์ ๋ณด๋ฅผ ๋ณด๋ด์ค๋ค
(์ฌ๋ฌ ์ ๋ณด๋ฅผ ๋์์ ์ ๋ฌํ ์ ์๋ค)
์๋์ ๊ฐ์ view.pug ํ์ผ์ ์์ฑํ๋ค
(์์ฑ๋ view.pug)
doctype html html head meta(charset="UTF-8") title Document body h1 Server Side JavaScript ul each topic in topics li a(href="/topic/"+topic)= topic article h2= title = description
๋ฐ๋ณต๋ฌธ( each i in val )์ ์ด์ฉํด์ data์ ๋ง์ถ์ด li, a ํ๊ทธ๋ฅผ ๋ง๋ค์ด์ค๋ค
topics๋ js ํ์ผ์์ ๋ฐ์์จ files ๋ชฉ๋ก์ด๋ค
(files๊ฐ ์๋ topics๋ฅผ ์ด์ฉํด์ผ ํจ)
๊ฐ ๋ชฉ๋ก์ a ํ๊ทธ๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ a ํ๊ทธ์ ์์ฑ์ ์ด์ฉํด์ ๋งํฌ๋ฅผ ๊ฑธ์ด์ค๋ค
a(href="/topic/"+topic)= topic
๋ณธ๋ฌธ ์ฝ๊ธฐ
๋ชฉ๋ก์ ํด๋ฆญํ์ ๋ ์ ๋ณด๋ฅผ ํ๋ฉด์ ํ์ํ๋ ๋ฒ
*๋ผ์ฐํธ
(์์ฑ๋ ์ฝ๋)
app.get('/topic/:id', function(req, res){ // get ๋ฐฉ์์ผ๋ก ๊ฐ list ํ์ด์ง ๋ผ์ฐํธ let id = req.params.id; // :id์ ๊ฐ fs.readdir('data', function(err, files){ if(err){ res.status(500).send('Internal Server Error'); } fs.readFile('data/'+id, 'utf-8', function(err, data){ if(err){ res.status(500).send('Internal Server Error'); } res.render('view', {topics:files, title:id, description:data}); }) }) })
URL์์ ๋ฐ๋ ์ ์๋ ๋ถ๋ถ์ :์ผ๋ก ํ์ํด์ค๋ค
let id = req.params.id;
์ด ์ฝ๋๋ฅผ ํตํด id์ ์ ๊ทผํ๋ค
์ ๊ทผํ id ๊ฐ์ ์ด์ฉํด์ ํ์ผ์ ์ฝ๊ธฐ ์ํด readFile์ ์ด์ฉํ๋ค
fs.readFile('data/'+id, 'utf-8', function(err, data){ if(err){ res.status(500).send('Internal Server Error'); } res.render('view', {topics:files, title:id, description:data}); })
์ด๋ ๊ฒ js ํ์ผ์์ ์ฌ๋ฌ ์ ๋ณด๋ฅผ pug๋ก ์ ๋ฌํด์ค ์ ์๋ค
readdir์ ์ด์ฉํด์ data ๋๋ ํ ๋ฆฌ ์๋์ ํ์ผ๋ค์ ๋ชฉ๋ก์ ๊ฐ์ ธ์จ ํ readFile์ ์ด์ฉํด์ id ๊ฐ์ ์ด์ฉํด์ ํด๋น ํ์ผ์ ์ฝ๋๋ค
์ฝ๋์ ๊ฐ์
*readdir ์ค๋ณต & view ์ค๋ณต
์ค๋ณต ์ ๊ฑฐ -> ์ ์ง๋ณด์ ์ฌ์, ๊ฐ๋
์ฑ ์ข์
app.get(['/topic', '/topic/:id'], function(req, res){ // get ๋ฐฉ์์ผ๋ก /topic ๋ผ์ฐํธ fs.readdir('data', function(err, files){ if(err){ res.status(500).send('Internal Server Error'); } let id = req.params.id; // :id์ ๊ฐ if(id){ // id ๊ฐ ์์ ๋ fs.readFile('data/'+id, 'utf-8', function(err, data){ if(err){ res.status(500).send('Internal Server Error'); } res.render('view', {topics:files, title:id, description:data}); }) } else{ // id ๊ฐ ์์ ๋ res.render('view', {topics: files, title: 'Wellcome', description:'Hello!!'}); } }) })
[]๋ฅผ ์ด์ฉํด์ ์ฌ๋ฌ path ๋ผ์ฐํธํ๊ธฐ
if - else๋ฅผ ์ด์ฉํด์ id ๊ฐ์ด ์์ ๋, ์์ ๋ ๋ค๋ฅธ ์ฝ๋๋ฅผ ์คํํ๋๋ก ํ๊ธฐ
id ๊ฐ์ด ์๋ ๊ฒฝ์ฐ์๋ง readFile์ ์ด์ฉํด์ id ๊ฐ์ ํด๋นํ๋ ํ์ผ ์ฝ๊ธฐ
id ๊ฐ์ด ์๋ ๊ฒฝ์ฐ์๋ ๋ฐ๋ก view์ topics, title, description ์ ๋ฌ
topic/:id ๋ผ์ฐํธ ์ญ์ ํ๊ธฐ
app.get('/topic/:id', function(req, res){ // get ๋ฐฉ์์ผ๋ก ๊ฐ list ํ์ด์ง ๋ผ์ฐํธ let id = req.params.id; // :id์ ๊ฐ fs.readdir('data', function(err, files){ if(err){ res.status(500).send('Internal Server Error'); } fs.readFile('data/'+id, 'utf-8', function(err, data){ if(err){ res.status(500).send('Internal Server Error'); } res.render('view', {topics:files, title:id, description:data}); }) }) })
*์ ๋ชฉ ํด๋ฆญํ๋ฉด /topic์ผ๋ก ๊ฐ๋๋ก view.pug ์์
doctype html html head meta(charset="UTF-8") title Document body h1 a(href='/topic') Server Side JavaScript ul each topic in topics li a(href="/topic/"+topic)= topic article h2= title = description
*new ํด๋ฆญํ๋ฉด .../topic/new๋ก ์ด๋ํ๋๋ก view.pug ์์
doctype html html head meta(charset="UTF-8") title Document body h1 a(href='/topic') Server Side JavaScript ul each topic in topics li a(href="/topic/"+topic)= topic article h2= title = description div a(href='/topic/new') new
*.../topic/new ๋์์ธ ๋น์ทํ๋๋ก new.pug ์์
doctype html html head meta(charset="UTF-8") title Document body h1 a(href='/topic') Server Side JavaScript ul each topic in topics li a(href="/topic/"+topic)= topic article form(action="/topic" method="post") p input(type="text" name="title" placeholder="title") p textarea(name="description") p input(type="submit")
์ด๋ js ํ์ผ์ ์์ ํ์ง ์์ผ๋ฉด topics๋ฅผ ๋ฐ์์ฌ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฌ๋ค
js ํ์ผ์ .../topic/new ๋ผ์ฐํธ ๋ถ๋ถ ์์
(์๋๋ render('new')๋ง ์์๋๋ฐ topics๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด readdir์ ์ด์ฉํด์ files๋ฅผ ์ฝ์ด์จ๋ค)
app.get('/topic/new', function(req, res){ //form์ topic/new๋ก fs.readdir('data', function(err, files){ if(err){ res.status(500).send('Internal Server Error'); } res.render('new', {topics: files}); }) })
*์ ๋ณด ์
๋ ฅ ํ ์ ์ถํ๋ฉด ํด๋น ํ์ด์ง๋ก ์ด๋ํ๋๋ก ์์
app.post ๋ถ๋ถ์ ์์ ํด์ผ ํ๋ค
res.send('Success!');
res.redirect('/topic/'+title);
์ด๋ ๊ฒ redirect๋ฅผ ์ด์ฉํด์ ๋ฐ๋ก ํด๋น ํ์ด์ง๋ก ์ด๋ํ๋๋ก ์์
'c o d i n g . . ๐ > Node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ํ์ฝ๋ฉ] NodeJs ํ์ฉํ๊ธฐ(2) (0) | 2021.08.09 |
---|---|
[์ํ์ฝ๋ฉ] NodeJs ํ์ฉํ๊ธฐ(1) (0) | 2021.08.02 |
[์ํ์ฝ๋ฉ] Node.js ๋ฅผ ์ด์ฉํด ์น์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ(3) (0) | 2021.07.12 |
[์ํ์ฝ๋ฉ] Node.js ๋ฅผ ์ด์ฉํด ์น์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ(2) (0) | 2021.07.12 |
[์ํ์ฝ๋ฉ] Node.js ๋ฅผ ์ด์ฉํด ์น์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ(1) (0) | 2021.06.28 |