
๋ฅผ ๋ฃ์ผ๋ฉด ํฐ๋ฏธ๋์์"start": "nodemon app.js"
๋ฅผ ์น๋๊ฑธ๋ก app.js๋ฅผ ๋ ธ๋๋ชฌ์ผ๋ก ์คํ์ด ๊ฐ๋ฅํ๋ค.npm start
const express = require('express');
const app = express();
app.get("/", function(req, res) {
res.send("<h1>Hello World</h1>")
})
app.listen(3000);
์ ๋ฒ ๊ฐ์์์๋ ์ด์ send๋ฅผ ํตํด์ html์ฝ๋๋ฅผ ์ง์ ์จ์ ๋ณด๋ด๋ ๋นํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋๋ฐ ์ด์ ๋
app.get("/", function(req, res) {
const htmlFilePath = path.join(__dirname, "views", "index.html");
res.sendFile(htmlFilePath);
})
app.get('/restaurants', function(req, res) {
const htmlFilePath = path.join(__dirname, "views", "restaurants.html");
res.sendFile(htmlFilePath);} )
์ง์ ํ์ผ์ ๋ณด๋ด๋ ํ์, views ํด๋์ restaurant.html ํ์ผ์ ์ง์ ๋ณด๋ด๋ ํ์์ผ๋ก ๊ต์ฒดํ๋ค.
<a href="restaurants.html">
<a href="/restaurants">
์๋๋ ์์ ๊ฒ์์ ๋ฐ์ ๊ฒ์ ํ์๋ค๋ก ๋ฐ๊ฟ์คฌ๋๋ฐ, ์ด๋ฌ๋ฉด ์ ๋๊ฒฝ๋ก๋ฅผ ์์ฑํ๋ค. ์ฆ ์๋ ๋๋ฉ์ธ ๋ค์ href๋ฅผ ์ฝ์ ํ๊ณ ์ด๋ํ๋ ๊ฒ์ด๋ค. ์๋ ์๋ ํํ์ด์ง๊ฐ domain ๋ค์ ๋ค๋ฅธ ๋ผ์ฐํฐ๊ฐ ์ฝ์ ๋์ด ์๋๋ผ๋ ๊ทธ ๋ผ์ฐํฐ๋ฅผ ๋นผ๊ณ href๋ฅผ ์ฝ์ ํ๊ณ ์ด๋ํ๋ค.
์ง๊ธ๊น์ง๋ website์์ ์ค๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋ GET์ด์๋ค๋ฉด ์ด์ ๋ ์๋ฒ์ชฝ์ผ๋ก ๋ณด๋ด๋ ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํ๋ POST๋ฅผ ์์๋ณด์
app.use(express.urlencoded({extended: false}));
css,js ํ์ผ์ ๋ถ๋ฅด๋ ์์ฒญ ์ฒ๋ฆฌ์ฒ๋ผ web์์ ์ค๋ ์ ๋ณด๋ค์ ์ ๊ทผํ๊ธฐ ์ํด ์์ ์ฝ๋๋ฅผ ์์ฑํด์ค๋ค.
app.post("/recommend", function(req, res) {
const restaurant = req.body; //object save
const filePath = path.join(__dirname, "data", "restaurants.json");
const fileData = fs.readFileSync(filePath);
const storedRestaurants = JSON.parse(fileData);
storedRestaurants.push(restaurant);
fs.writeFileSync(filePath, JSON.stringify((storedRestaurants)));
res.redirect("/confirm");
});
๊ทธ๋ฆฌ๊ณ recommend์์ ์ ๋ณด๊ฐ ์์ ๋(์๋น ๊ด๋ จ ์ ๋ณด ๊ฐ์ฒด๊ฐ ์ฌ ์์ ) ๋ณ์์ ์ ์ฅํ๊ณ data ํด๋์ ์๋ 'restaurants.json'ํ์ผ์ ์ ์ฅํ๋ ํ์์ผ๋ก ์ฝ๋๋ฅผ ์ง๊ณ website์์๋ /confirm ํ์ด์ง๋ก ๋์ด๊ฐ๋๋ก ํ๋ค.
์ฌ๊ธฐ์ ์ค์ํ๊ฒ ์ด๊ฒ html์ form์์ ์ค๋ ์ ๋ณด๋ค์ผํ
๋ฐ, html์ form์
<form action="/recommend" method="POST">
์ ๊ฐ์ด ์ฐ๊ฒฐ(?) ์์ ์ ๊ผญ ํด์ฃผ๊ณ ๋ํ restaurants.json ํ์ผ์ ๋น ๋๊ดํธ [] ์ ์ด๋๋ ๊ฒ๋ ์์ง ์์์ผ ํ๋ค.
=> npm install ์ด๋??
2๊ฐ์ง๋ก ๋๋์ด ๋ณผ ์ ์๋ค.
- ํจํค์ง ๋ช ์ ๋ช ์ํด ํน์ ํจํค์ง๋ฅผ ์ค์นํ๋ ๋์
npm intall express
npm install nodemon๊ณผ ๊ฐ์ด ํน์ ํจํค์ง๋ช ์ ๋ช ์ํด์ ํน์ ํจํค์ง๋ฅผ ์ค์นํ ์ ์๋ค.
- "package.json"ํ์ผ์ ์์กดํ์ฌ ์ค์น
package.json ํ์ผ์์ ์ด๋ค ํจํค์ง๋ฅผ ์ค์นํ์ฌ ํ์ฌํ๋์ง ํ์ธํ๊ณ ์ค์นํ๋ ๊ฒ๊ฐ์์์๋ npm install์ ์ฌ์ฉํ๊ธฐ์ 2๋ฒ ์ผ์ด์ค์ ํด๋น๋ ํ ๋ฐ ๊ทธ๋ฌ๋ฉด ๋ด๊ฐ package.jsonํ์ผ์ ์ ๋๋ก ์๊ฐ์ ธ์์ ๊ฐ๋ฅ์ฑ์ด ์๋ค.

๊ทธ๋ผ์๋ ์ค๋ฅ๊ฐ ๋ด๋ค. ๊ฐ์๋ฅผ ๋ณด๋ package.jsonํ์ผ์ด ๋ฐ์ ๋์์๋๋ฐ ๋๋ ํด๋ ์์ ์ง์ด๋ฃ์ด๋์๊ฒ ์ค๋ฅ์ ์์ธ์ด์๋ค. ํด๊ฒฐ:)
์๋ฌด๋๋ ๊ตฌ๋ฆ์์๋ node.js๋ html/css/js๋ ์คํ์ด ๋ค๋ฅด๋๊น ๊ทธ๋ฐ ๊ฒ ๊ฐ์๋ฐ.. ์ ๋ด๊ฐ ๋ชจ๋ฅด๋๊ฒ ์๋ ๊ฑธ๊น ์๋ ๊ตฌ๋ฆide์ ํ๊ณ์ผ๊น?
๊ฐ์์์๋ live-server๋ฅผ ํตํด์ html์ ์ฌ๋ ๊ฒ ๊ฐ์์ npm์ ํตํด์ live-server๋ฅผ ์ค์นํ๋ค.
npm install -g live-server
๋ก ์ฒ์์ ์ค์นํ ๋ ค๊ณ ํ๋๋ฐ, ์ด๋ ๊ฒ ํ๋๊น 'deprecated'๋ผ๊ณ ๋จ๋ฉด์ package.json ํ์ผ์ ์ถ๊ฐ๊ฐ ๋์ง ์์์
npm i live-server
๋ก ์ค์นํ๋๊น ๋๊ฐ์ด 'deprecated' ๋จ๊ธฐ๋ ํ๋๋ฐ ๊ฒฐ๊ณผ์ ์ผ๋ก package.json ํ์ผ์ ์ถ๊ฐ๊ฐ ๋์๋ค.
๊ทธ ์ดํ index.html์ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํด์ ํฐ๋ฏธ๋์์
live-sever
๋ฅผ ์
๋ ฅํ์ฌ http://127.0.0.1:8080 ๋ผ๋ ์ฌ์ดํธ๋ฅผ ๋ฐ์์ ๋ค์ด๊ฐ์ง๋ง ๋ ์๋๋ค... ํํํํํํณใ
ใ
ใ

์๋ฒ์ ํธ์คํ
์ค์ ์ด localhost ๋๋ 127.0.0.1 ์ด๋ผ๋ฉด 0.0.0.0 ์ผ๋ก ์์ ํด๋ณด์ธ์.
๋ผ๊ณ ๊ตฌ๋ฆ์ ๋์์๊ธฐ๋ ํ๋ฐ.. ์ ์ด์ node.js ์ปจํ
์ด๋์ฌ์ ํธ์คํ
์ค์ ์ด ์๋๋ผ ๊ทธ๋ฅ ํฌํธ ์ค์ ๋ง ํ ์ ์์ง ์๋ ์ถ๊ธดํ๋ฐ.. ํํณ
์ฐ์ live-server๋ก ์ฌ๋ ๋ฐฉ์์ด ์ฝ์ง ์์ ๊ฒ ๊ฐ์์ ๋์ ์ค์น๋ Mr.gpt๊ป ์กฐ์ธ์ ๊ตฌํ๋ค.
const express = require('express');
const app = express();
const port = 3000;app.get('/', (req, res) => {
// ํด๋ผ์ด์ธํธ์๊ฒ index.html ํ์ผ ์ ๊ณต
res.sendFile(__dirname + '/frontend-site/index.html');
});app.listen(port, () => {
console.log(Server is listening at http://localhost:${port});
});
js ํ์ผ์์ ์๋ฒ๋ฅผ ๋ง๋ค๊ณ ์๋ฒ์์ html์ ์ฌ๋ ๋ฐฉ์์ธ๋ฐ ... ๋๋ค! ๊ทผ๋ฐ css,js ๋ค ๋ ๋ผ๊ฐ๊ณ html๋ง ์ผ์ง๋ค!....


์น์ฌ์ดํธ์์ f12๋ฅผ ๋๋ฅด๊ณ ํ์ธ์ ํด๋ณด๋ ๋ญ
'Refused to apply style from because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.'
์ด๋ฐ์์ผ๋ก ๋ ์ ํ์ธํด๋ณด๋ ๊ฒฝ๋ก๋ฌธ์ ๋ ๊ฒฝ๋ก ์์ /๋ฅผ ๋ถ์ฌ์ผ ํ๋ ์ด๋ฐ ๊ฒ๋ค์ ํด๋ดค๋๋ฐ๋ ์๋ผ์ ์ด๊ฑด ๋ฒ๋ฆฌ๊ธฐ๋ก ๊ฐ์๊ฐ ๋ ์ค์ํ๋๊น:)

๊ฐ์์์ ์๋ ค์คฌ๋ค. ํํณํณํ
์๋ html์ ๋ถ๋ฅด๊ณ html์์ ๋ค์ css, javascript, img ๋ฑ์ ํ์ผ์ ๋ค์ ์์ฒญ(๋ถ๋ฅด๋)ํ๋ ํํ์ด๋ค.
๊ทธ๋ฐ๋ฐ app.js(์๋ฒ ์ฝ๋ ์ ์ด๋
ผ ํ์ผ)์ ์ด๋ฐ ์์ฒญ์ ๋ค๋ฃจ๋ ๋ผ์ฐํธ์ ๋ํ ์ฝ๋๊ฐ ์ ํ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด์ ๋ํ ํด๊ฒฐ์ฑ
์ผ๋ก๋ html,css,js,img ์ฝ๋๊ฐ dynamic์ด ์๋๋ผ static์ด๋ผ๋ ๊ฐ์ ํ์ app.js์
app.use(express.static("public"));
์ด ์ฝ๋๋ฅผ ์ถ๊ฐํจ์ผ๋ก์ ๊ฐ๋ฅํ๋ค. public์ด๋ผ๋ ํด๋(์ด๋ฆ ๋ง์๋๋ก ํด๋ ใฑใ
)์ css,js,img์ ๊ฐ์ด html์ ๋ก๋ํ์ ๋ ์ถ๊ฐ์ ์ธ ์์ฒญ์ ๋ณด๋ผ ํ์ผ๋ค์ ๋ชจ์๋๊ณ ์์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ฉด
public์ ํ์ผ์ ๋ฌ๋ผ๋ ์์ฒญ์ ํ์ ๋, static์ด๋ฉด ์ ๊ณต์ ํด์ค๋ค.

์์ฆ ์ข ๋ํํด์ง ๊ฒ ๊ฐ๊ณ ์ง์ค๋ ์ ์๋๋ค. ๊ทผ๋ฐ ๊ธ๋ก ์ ๋ฆฌํ๋ฉด์ ๊ฐ๋ฐํ๋ฉด ์ง์ค์ด ์๋๊ธฐ์ ์์ผ๋ก๋ ๋งค์ผ ๊ธ ํ ๊ฐ์ฉ์ ์ฐ๋ ๊ฑธ ๋ชฉํ๋ก ํ๋๊ฒ ์ด๋ค๊ฐ ์ถ๋ค.(๋ฌผ๋ฃฌ ํด๊ฐ ์ ์ธ:)
์ค๋ html ๋ก๋ํ๋ ๋ฌธ์ ๋ก ๋ง์ ์๊ฐ์ ์จ์ ์ง๋๋ฅผ ๋ง์ด ๋ชป๋๊ฐ๊ฒ ์์ฝ๊ธด ํ์ง๋ง ๊ฐ๋ฐ์ด ๋ฌ๋ ๋ญ๊ฐ ๋ฌ๋ ๋ฐฐ์์ ์์ด์ ์ด๋ ค์ด ๋ฌธ์ , ์๋๋ ๋ฌธ์ ๋ฅผ ๋ถ์ก๊ณ ๋์ด์ง๋ ๊ฒ๋ ํ์ํ๋ค๊ณ ์๊ฐํ๊ธฐ์ ์ค๋ ๊ณต๋ถ์ ๋ง์กฑํ๋ค. ๋ด์ผ๋ ๊ธ์ด ์ฌ๋ผ์ค๊ธฐ๋ฅผ...
