const express = require('express');
const app = express();
app.listen(8080, ()=>{
console.log('포트번호 8080 서버접속')
})
npm install -g nodemon
app.get('/product', (req, res)=>{ //파라미터 req는 요청, res는 응답
res.send('상품페이지');
});
(server.js와 같은 폴더에 index.html 생성 후 작성)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<h4>index 페이지입니다.</h4>
</body>
</html>
(server.js)
app.get('/', (req, res)=>{
res.sendFile(__dirname +'/index.html') //__dirname은 파일명(index.html)을 제외한 절대경로
}); //__filename은 파일명을 포함한 절대 경로
(server.js와 같은 폴더에 input.html 생성 후 작성)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
<title>Document</title>
</head>
<body>
<h4 class="container mt-4"><strong>input 페이지</strong></h4>
<div class="container mt-3">
<form action="/add" method="POST"> //action과 전송형식(POST형식)을 작성
<div class="form-group">
<label>제목</label>
<input type="text" class="form-control" name="title"> // name="title"
</div>
<div class="form-group">
<label>내용</label>
<input type="text" class="form-control" name="content"> // name="content"
</div>
<button type="submit" class="btn btn-outline-secondary">Submit</button>
</form>
</div>
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
</body>
</html>
app.use(express.urlencoded({extended: true}))
(server.js)
const express = require('express');
const app = express();
app.use(express.urlencoded({extended: true})) //이 코드 추가
app.listen(8080, ()=>{
console.log('포트번호 8080 서버접속')
})
app.get('/product', (req, res)=>{
res.send('상품페이지');
});
app.get('/', (req, res)=>{
res.sendFile(__dirname +'/index.html')
});
app.get('/input', (req, res)=>{
res.sendFile(__dirname +'/input.html')
});
app.post('/add', (req, res){ //post형식 전송 코드 작성
console.log(req.body);
console.log(req.body.title); //input.js의 name="title"
console.log(req.body.content); //input.js의 name="content"
res.send('전송완료');
});
npm install mongodb
const MongoClient = require('mongodb').MongoClient;
(server.js)
const express = require('express');
const app = express();
const MongoClient = require('mongodb').MongoClient; // 1.추가
let db; // 2. DB 변수 하나를 생성
app.use(express.urlencoded({extended: true}))
//3. 아래 코드 수정
MongoClient.connect('mongoDB 클러스터에서 복사해온 URL',(error, client)=>{
if (error) return console.log(error);
db = client.db('디비제목'); //4. 클러스터 데이터베이스를 db변수에 저장(cluster-collections-add my own data 의 데이터베이스 제목)
app.listen(8080, ()=>{
console.log('포트번호 8080 서버접속');
});
});
app.get('/product', (req, res)=>{
res.send('상품페이지');
});
app.get('/', (req, res)=>{
res.sendFile(__dirname +'/index.html')
});
app.get('/input', (req, res)=>{
res.sendFile(__dirname +'/input.html')
});
app.post('/add', (req, res)=>{
res.send('전송완료');
//5. 아래 코드 추가하여 post로 input데이터를 MongoDB에 저장
db.collection('post').insertOne({제목 : req.body.title, 내용 : req.body.content} , ()=>{
console.log('저장완료');
});
});
npm install ejs
ejs는 자바스크립트로 HTML 마크업을 생성할 수 있는 간단한 템플릿 언어로 <% %> 형태의 태그를 이용해서 HTML 중간중간 필요한 로직 및 데이터를 추가할 수 있으며, for문, if문을 통해 서버 데이터를 바로 html로 만들 수 있다.
const express = require('express');
const app = express();
const MongoClient = require('mongodb').MongoClient;
app.set('view engine','ejs'); // ejs 추가
let db;
app.use(express.urlencoded({extended: true})) ;
MongoClient.connect('mongodb+srv://admin:001@cluster0.szzbh.mongodb.net/myFirstDatabase?retryWrites=true&w=majority',(error, client)=>{
if (error) return console.log(error);
db = client.db('todoapp');
app.listen(8080, ()=>{
console.log('포트번호 8080 서버접속');
});
});
app.get('/product', (req, res)=>{
res.send('상품페이지');
});
app.get('/', (req, res)=>{
res.sendFile(__dirname +'/index.html')
});
app.get('/input', (req, res)=>{
res.sendFile(__dirname +'/input.html')
});
app.post('/add', (req, res)=>{
res.send('전송완료');
db.collection('post').insertOne({제목 : req.body.title, 내용 : req.body.content} , function(){
console.log('저장완료');
});
});
/// DB 읽기
// list로 GET요청으로 접속하면 실제 DB에 저장된 데이터들이 출력되는 HTML을 보여줌
app.get('/list',(req,res)=>{
//디비에 저장된 post라는 collection안의 데이터(제목 또는 내용 등)를 꺼내기
db.collection('post').find().toArray( (err, rslt)=>{ //DB에서 데이터를 찾음
console.log(rslt);
res.render('list.ejs', { posts : rslt }); // 찾은 데이터를 ejs 파일에 넣음
});
});
*프로젝트안에 views 폴더를 생성 - views 폴더 안에 list.ejs 파일 생성
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<% for(let i=0; i < posts.length ; i++){ %>
<h4>제목 : <%= posts[i].제목 %></h4>
<h4>내용 : <%= posts[i].내용 %> </h4>
<% } %>
</body>
</html>