일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AtomEditor
- 자바 영어면접
- React
- Express middleware
- jsx 문법
- 자바 면접
- mysql
- 자바 인터뷰
- Node.js Express
- tech interview
- 자바 기술면접
- 맥북 필수 앱
- 맥북 초보
- 백준 알고리즘
- 알고리즘
- 생활코딩
- 아톰에디터
- 자바 개발자
- 백준
- 맥북 유용한 앱
- React props
- 맥북 팁
- node.js
- react jsx
- 기술면접
- react state
- Java tech interview
- 백준 단계별로 풀어보기
- 맥북 사용법
- 리액트
- Today
- Total
song.log
[Node.js] Express : Router(라우터) , 보안 , Express-generator 본문
[Node.js] Express : Router(라우터) , 보안 , Express-generator
SingaKorean 2019. 12. 30. 19:12
1. Router
현업에 종사하다보면 Route가 엄청난 갯수를 이룰 때가 많다.
그렇다 보면 이를 보다 깔끔하게 정리하여 보는 것이 효율적일 때가 있다.
그 역할을 Router가 하는 것이다.
주소체계을 변경하여 Router를 만들 준비를 한다. 먼저 경로앞에 들어갈 키워드를 넣어 그룹화 한다.
Router라는 새로운 폴더를 생성해주고 그 안에 topic이라는 파일을 생성한다.
여태까지 routing 했던 것을 topic.js 파일로 옮긴다.
topic.js 파일에는 아래의 형식과 기존의 코드의 그룹화 한 것을 합쳐준다
<topic.js>
var express = require('express');
var router = express.Router();
module.exports = router;
<main.js>
app.use(express.static('public'));
app.use('/topic', topicRouter);
합친 코드
var express = require('express');
var router = express.Router();
var path = require('path');
var fs = require('fs');
var template = require('../lib/template.js');
var sanitizeHtml = require('sanitize-html');
router.get('/create', function(request,response){
var title = 'Web- create';
var list = template.list(request.list);
var html = template.HTML(title, list, `
<form action="/create_process" method="post">
<p><input type="text" name="title" placeholder="title"></p>
<p>
<textarea name="description" placeholder="description"></textarea>
</p>
<p>
<input type="submit">
</p>
</form>
`,'');
response.send(html);
});
router.post('/create_process', function(request, response){
var post = request.body;
var title = post.title;
var description = post.description;
fs.writeFile(`data/${title}`,description,'utf-8',function(err){
response.writeHead(302, {Location: `/`});
response.end();
});
});
router.post('/update_process', function(request, response){
var post = request.body;
var id = post.id;
var title = post.title;
var description = post.description;
fs.rename(`data/${id}`,`data/${title}`,function(err){
fs.writeFile(`data/${title}`,description,'utf-8', function(err){
response.writeHead(302,
{Location: `/${title}`});
response.end();
});
});
});
router.post('/delete_process', function(request, response){
var post = request.body;
var id = post.id;
fs.unlink(`./data/${id}`, function(err){
response.writeHead(302,{Location: `/`});
response.end();
});
});
router.get('/update/:pageid', function(request, response){
var filteredId = path.parse(request.params.pageid).base;
fs.readFile(`./data/${filteredId}`,'utf-8', function(err, description){
var title = request.params.pageid;
var list = template.list(request.list);
var html = template.HTML(title, list,`
<form action="/update_process" method="post">
<input type="hidden" name="id" value="${title}">
<p><input type="text" name="title" placeholder="title" value="${title}"></p>
<p>
<textarea name="description" placeholder="description">${description}</textarea>
</p>
<p>
<input type="submit">
</p>
</form>
`,`<a href="/create">create</a> <a href="/update/${title}">update</a>`);
response.send(html);
});
});
router.get('/:pageid', function(request, response, next){
var filteredId = path.parse(request.params.pageid).base;
fs.readFile(`data/${filteredId}`, 'utf8', function(err, description){
if(err){
next(err);
}else{
var title = request.params.pageid;
var sanitizedTitle = sanitizeHtml(title);
var sanitizedDescription = sanitizeHtml(description,{
allowedTags:['h1']
});
var list = template.list(request.list);
var html = template.HTML(sanitizedTitle, list,
`<h2>${sanitizedTitle}</h2><p>${sanitizedDescription}</p>`,
`<a href="/create">create</a> <a href="/update/${sanitizedTitle}">update</a>
<form action="/delete_process" method="post">
<input type="hidden" name="id" value="${sanitizedTitle}">
<input type="submit" value="delete">
</form>
`);
response.send(html);
}
});
});
module.exports = router;
2. express를 사용할 때의 보안
1. express의 최신 버전을 사용할 것
2. https /TLS을 사용
3. helmet을 사용 - helmet의 디테일 기능 : Use Helmet https://expressjs.com/en/advanced/best-practice-security.html
npm install --save helmet
4. 쿠키를 안전하게 사용 할 것
5. dependencies를 잘 관리할 것 : nsp를 통해 package-json안에 있는 npm들을 체크해 줌
npm i nsp -g
3. express-generator 설치 방법 및 사용법
먼저, npm을 설치
npm install express-generator -g
-h로 할 수 있는 옵션 체크
express -h
express myapp으로 20191230폴더 안에 새로운 프로젝트 생성
express myapp
cd myapp
npm install
npm install로 기본적으로 필요로 하는 npm을 자동으로 설치
npm start
참조한 생활코딩 URL :
https://opentutorials.org/module/3590/21425
https://opentutorials.org/module/3590/21426
https://opentutorials.org/module/3590/21428
'DevLog > Node.js' 카테고리의 다른 글
[React x Node.js] React와 Node.js 연동하는 방법 (0) | 2020.01.15 |
---|---|
[Node.js] Express : 미들웨어(Middleware) 만들기, 실행 순서, 사용법 (0) | 2019.12.23 |
[Node.js] Express 미들웨어 사용 : body-parser, compression (0) | 2019.12.23 |
[Node.js] Express의 hello world, Route Parameter, 홈페이지 구현, 페이지 생성, 수정, 삭제 기능 구현 (0) | 2019.12.23 |
[Node.js] 모듈의 형식&제작, 입력 정보/출력 정보에 대한보안 (0) | 2019.12.21 |