1. 어제 수업할 때 만든 package를 이용하여 복원하기
: 복원할 package + 터미널에 npm install 명령어
2. 포스트맨 다운로드
** 국비 수업 + 라이징 프로그래밍 수업을 진행하면서 다운받은 상태 -> https://shine94.tistory.com/85
3. 1_Express1.js
const express = require('express');
const bodyParser = require('body-parser'); // post 데이터를 전달받기 위해 사용
const app = express();
const port = 3000;
// body-parser를 이용하여 application/x-www-form-urlencoded 파싱
// http://localhost:3000/?userid=apple&userpw=1111
// └ 전송방식이 get이 아니기 때문에 데이터를 받을 수 없음
app.use(bodyParser.urlencoded({extended: false}));
app.use((req, res) => {
const paramId = req.body.userid;
const paramPw = req.body.userpw;
console.log(`paramId: ${paramId}, paramPw:${paramPw}`);
res.writeHead(200, {'content-type':'text/html;charset=utf-8'});
res.write('<h2>익스프레스 서버에서 응답한 메시지입니다.</h2>');
res.write(`<p>아이디 : ${paramId}</p>`);
res.write(`<p>비밀번호 : ${paramPw}</p>`);
res.end();
});
app.listen(port, () => {
console.log(`${port} 포트로 서버 실행중...`);
})
4. REST(REpresentational State Transfer)
: 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 것을 의미한다.
5. CRUD 연산
CREATE : 생성(POST)
READ : 조회(GET)
UPDATE : 수정(PUT)
DELETE : 삭제(DELETE)
6. Router 미들웨어
: 사용자의 다양한 요청이 들어왔을때 use() 메소드로 설정한 미들웨어가 항상 호출되는 불편한 점이 있다.
이를 해결하고자 사용하는 미들웨어가 Router 미들웨어이다.
7. Router 객체 만들기
const 라우터객체 = express.Router();
라우터객체.route(요청패스).get(실행할 함수);
라우터객체.route(요청패스).post(실행할 함수);
8. 익스프레스에 Router 객체 적용
app.use('/', 라우터객체);
9. 2_Express2.js
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
app.use(bodyParser.urlencoded({express: false}));
const router = express.Router();
// http://localhost:3000/member/login -> post
router.route('/member/login').post((req, res) => {
console.log('/member/login 호출!');
});
// http://localhost:3000/member/regist -> post
router.route('/member/regist').post((req, res) => {
console.log('/member/regist 호출!');
});
// http://localhost:3000/member/about -> get
router.route('/member/about').get((req, res) => {
console.log('/member/about 호출!');
});
app.use('/', router);
app.all('*', (req, res) => {
res.status(404).send('<h2>페이지를 찾을 수 없습니다.</h2>');
});
app.listen(port, () => {
console.log(`${port} 포트로 서버 실행중...`);
});
10. 템플릿 엔진
1) EJS(Embedded JavaScript)
: EJS 모듈은 템플릿 엔진 모듈이다.
템플릿 엔진 모듈은 특정한 형식인 파일로부터 HTML 페이지를 생성하는 모듈이다.
** EJS 파일 형식의 특수 코드
<% ~~~ code ~~~ %> : 자바스크립트 코드를 입력하는 영역이다.
<%= 변수 또는 값 %> : 데이터를 출력한다.
<%- 변수 또는 객체 %> : EJS 파일 전체를 전달한다.
** EJS 데이터를 전달하는 방법
render() : 메소드의 매개 변수에 전달하고자 하는 데이터를 입력하여 전달한다.
** 3_Ejs1.js
const express = require('express');
const fs = require('fs');
const ejs = require('ejs'); // npm i ejs
const app = express();
const port = 3000;
const router = express.Router();
// http://localhost:3000/ejstest
router.route('/ejstest').post((req, res) => {
fs.readFile('./ejs1.ejs', 'utf-8', (err, data) => {
if(!err) {
res.writeHead(200, {'content-type' : 'text/html'});
res.end(ejs.render(data));
} else {
console.log(err);
}
});
});
app.use('/', router);
app.all('*', (req, res) => {
res.status(404).send('<h2>페이지를 찾을 수 없습니다.</h2>');
});
app.listen(port, () => {
console.log(`${port} 포트로 서버 실행중...`);
});
** ejs1.ejs
<!DOCTYPE html>
<html lang="ko">
<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>EJS 첫 페이지</title>
</head>
<body>
<%
const userid = 'apple';
const username = '김사과';
%>
<h2>EJS 첫 페이지</h2>
<p>아이디 : <%=userid%></p>
<p>이름 : <%=username%></p>
<p>생년월일을 입력하세요</p>
<p>
<select>
<%
for(let i=1970; i<= 2021; i++) {
%>
<option value="<%=i%>"><%=i%></option>
<%
}
%>
</select>
</p>
</body>
</html>
** 4_Ejs2.js
const express = require('express');
const fs = require('fs');
const ejs = require('ejs');
const app = express();
const port = 3000;
const router = express.Router();
// http://localhost:3000/login
router.route('/login').post((req, res) => {
const userinfo = {userid: 'apple', userpw: '1234'};
fs.readFile('./ejs2.ejs', 'utf-8', (err, data) => {
if(!err) {
res.writeHead(200, {'content-type' : 'text/html'});
res.end(ejs.render(data, userinfo));
} else {
console.log(err);
}
});
});
app.use('/', router);
app.all('*', (req, res) => {
res.status(404).send('<h2>페이지를 찾을 수 없습니다.</h2>');
});
app.listen(port, () => {
console.log(`${port} 포트로 서버 실행중...`);
});
** ejs2.ejs
<!DOCTYPE html>
<html lang="ko">
<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>로그인 파라미터</title>
</head>
<body>
<h2>EJS 로그인 파라미터</h2>
<p>아이디 : <%=userid%></p>
<p>패스워드 : <%=userpw%></p>
</body>
</html>
** 5_Ejs3.js
const express = require('express');
const fs = require('fs');
const ejs = require('ejs');
const app = express();
const port = 3000;
const router = express.Router();
const header = fs.readFileSync('./header.ejs', 'utf-8');
const body = fs.readFileSync('./body.ejs', 'utf-8');
// http://localhost:3000/about
router.route('/about').post((req, res) => {
const html = ejs.render(header,
{title: '매개변수로 전달된 제목입니다.',
content: ejs.render(body, {message: '매개변수로 전달된 텍스트 메시지 입니다!'})});
res.writeHead(200, {'content-type':'text/html'});
res.end(html);
});
app.use('/', router);
app.all('*', (req, res) => {
res.status(404).send('<h2>페이지를 찾을 수 없습니다.</h2>');
});
app.listen(port, () => {
console.log(`${port} 포트로 서버 실행중...`);
});
** header.ejs
<!DOCTYPE html>
<html lang="ko">
<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><%=title%></title>
<style>
body { background-color: deepskyblue; }
h2 { font-size: 30px; color: gold; }
</style>
</head>
<body>
<header>
<h2><%=title%></h2>
</header>
<div>
<p><%-content%></p>
</div>
</body>
</html>
** body.ejs
<p>예제로 만든 템플릿 입니다.</p>
<p>다른 파일로 준비한 것을 읽어와서 사용합니다.</p>
<p><%=message%></p>
2) PUG(구 jade)
** 6_Jade1.js
const express = require('express');
const fs = require('fs');
const jade = require('jade'); // npm i jade
const app = express();
const port = 3000;
const router = express.Router();
router.route('/about').post((req, res) => {
fs.readFile('./jade1.jade', 'utf-8', (err, data) => {
if(!err) {
const jd = jade.compile(data);
res.writeHead(200, {'content-type':'text/html'});
res.end(jd());
} else {
console.log(err);
}
});
});
app.use('/', router);
app.all('*', (req, res) => {
res.status(404).send('<h2>페이지를 찾을 수 없습니다.</h2>');
});
app.listen(port, () => {
console.log(`${port} 포트로 서버 실행중...`);
})
** jade1.jade
html
head
title jade 테스트입니다.
body
h1 안녕하세요. Jade
p 처음으로 만드는 jade 예제입니다.
br
a(href='https://www.google.com', alt='구글') 구글로 이동
** 7_Jade2.js
const express = require('express');
const fs = require('fs');
const jade = require('jade');
const app = express();
const port = 3000;
const router = express.Router();
// http://localhost:3000/userinfo
router.route('/userinfo').post((req, res) => {
fs.readFile('./jade2.jade', 'utf-8', (err, data) => {
if(!err) {
const jd = jade.compile(data);
res.writeHead(200, {'content-type':'text/html'});
res.end(jd({userid: 'apple', name: '김사과', desc: '착해요'}));
} else {
console.log(err);
}
});
});
app.use('/', router);
app.all('*', (req, res) => {
res.status(404).send('<h2>페이지를 찾을 수 없습니다.</h2>');
});
app.listen(port, () => {
console.log(`${port} 포트로 서버 실행중...`);
})
** jade2.jade
html
head
title 사용자 정보 보기
body
#header
h2 사용자 아이디 : #{userid}
hr
#header
h2 사용자 이름 : #{name}
p= desc
hr
.article
a(href='https://www.daum.net') 다음으로 이동
hr
.for
- for(let i=0; i<10; i++) {
p
a(href='http://localhost:3000/#{i}') 사이트 이동 #{i}
- }
3) nunjucks
www.npmjs.com/package/nunjucks
11. Node.js에서 메일 보내기
: nodemailer 모듈 → gmail 서버를 이용하여 메일을 보낼 수 있다.
1) 보안 수준이 낮은 앱의 액세스
https://myaccount.google.com/lesssecureapps
2) 계정 액세스 사용을 허용
https://accounts.google.com/DisplayUnlockCaptcha
3) nodemailer 설정
const nodemailer객체명 = nodemailer.createTransport({
service: 'Gmail',
auth: {
user: '아이디@gmail.com',
pass: '비밀번호'
},
host: 'smtp.mail.com',
port: '465'
});
4) 메일 발송 옵션 설정
const 메일발송옵션객체명 = {
from: "이름<메일주소>",
to: "이름<메일주소>",
subject: "제목",
text: "내용" or html: "HTML코드"
}
** 8_Nodemailer1.js
const nodemailer = require('nodemailer'); // npm i nodemailer
const tansporter = nodemailer.createTransport({
service: 'Gmail',
auth: {
user: '구글아이디@gmail.com',
pass: '구글비밀번호'
},
host: 'smtp.mail.com',
port: '465'
});
const mailOptions = {
from: "발송자_이름<발송자_메일주소>",
to: "수신자_이름<수신자_메일주소>",
subject: "node.js의 nodemailer 테스트중입니다.",
html: "<h2>안녕하세요. 메일이 잘 가나요?</h2><p style='color: deeppink;'>정말 잘 가네요!</p>"
}
tansporter.sendMail(mailOptions, (err, info) => {
tansporter.close();
if(err) {
console.log(err);
} else {
console.log(info)
}
});
'웹_프론트_백엔드 > 프론트엔드' 카테고리의 다른 글
2021.02.28 (0) | 2021.03.01 |
---|---|
2021.02.27 (0) | 2021.02.27 |
2021.02.20 (0) | 2021.02.21 |
2021.02.07 (0) | 2021.02.18 |
2021.02.06 (0) | 2021.02.06 |