수업소개
여기서는 미들웨어의 개념을 소개하고, 타인이 만든 미들웨어를 사용하는 방법을 알아봅니다.
강의 1
body-parser를 이용해서 post 방식으로 전송된 form 데이터를 쉽게 가져오는 방법을 살펴보겠습니다.
소스코드
main.js
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | var express = require( 'express' ) var app = express() var fs = require( 'fs' ); var path = require( 'path' ); var qs = require( 'querystring' ); var bodyParser = require( 'body-parser' ); var sanitizeHtml = require( 'sanitize-html' ); var template = require( './lib/template.js' ); app.use(bodyParser.urlencoded({ extended: false })); //route, routing //app.get('/', (req, res) => res.send('Hello World!')) app.get( '/' , function (request, response) { fs.readdir( './data' , function (error, filelist){ var title = 'Welcome' ; var description = 'Hello, Node.js' ; var list = template.list(filelist); var html = template.HTML(title, list, `<h2>${title}</h2>${description}`, `<a href= "/create" >create</a>` ); response.send(html); }); }); app.get( '/page/:pageId' , function (request, response) { fs.readdir( './data' , function (error, filelist){ var filteredId = path.parse(request.params.pageId).base; fs.readFile(`data/${filteredId}`, 'utf8' , function (err, description){ var title = request.params.pageId; var sanitizedTitle = sanitizeHtml(title); var sanitizedDescription = sanitizeHtml(description, { allowedTags:[ 'h1' ] }); var list = template.list(filelist); var html = template.HTML(sanitizedTitle, list, `<h2>${sanitizedTitle}</h2>${sanitizedDescription}`, ` <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); }); }); }); app.get( '/create' , function (request, response){ fs.readdir( './data' , function (error, filelist){ var title = 'WEB - create' ; var list = template.list(filelist); 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); }); }); app.post( '/create_process' , function (request, response){ var post = request.body; var title = post.title; var description = post.description; fs.writeFile(`data/${title}`, description, 'utf8' , function (err){ response.writeHead(302, {Location: `/?id=${title}`}); response.end(); }); }); app.get( '/update/:pageId' , function (request, response){ fs.readdir( './data' , function (error, filelist){ var filteredId = path.parse(request.params.pageId).base; fs.readFile(`data/${filteredId}`, 'utf8' , function (err, description){ var title = request.params.pageId; var list = template.list(filelist); 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?id=${title}" >update</a>` ); response.send(html); }); }); }); app.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 (error){ fs.writeFile(`data/${title}`, description, 'utf8' , function (err){ response.redirect(`/?id=${title}`); }) }); }); app.post( '/delete_process' , function (request, response){ var post = request.body; var id = post.id; var filteredId = path.parse(id).base; fs.unlink(`data/${filteredId}`, function (error){ response.redirect( '/' ); }); }); app.listen(3000, function () { console.log( 'Example app listening on port 3000!' ) }); |
강의 2
compression 미들웨어를 이용해서 컨텐츠를 압축해서 전송하는 방법을 살펴보겠습니다.
소스코드
main.js
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | var express = require( 'express' ) var app = express() var fs = require( 'fs' ); var path = require( 'path' ); var qs = require( 'querystring' ); var bodyParser = require( 'body-parser' ); var sanitizeHtml = require( 'sanitize-html' ); var compression = require( 'compression' ) var template = require( './lib/template.js' ); app.use(bodyParser.urlencoded({ extended: false })); app.use(compression()); //route, routing //app.get('/', (req, res) => res.send('Hello World!')) app.get( '/' , function (request, response) { fs.readdir( './data' , function (error, filelist){ var title = 'Welcome' ; var description = 'Hello, Node.js' ; var list = template.list(filelist); var html = template.HTML(title, list, `<h2>${title}</h2>${description}`, `<a href= "/create" >create</a>` ); response.send(html); }); }); app.get( '/page/:pageId' , function (request, response) { fs.readdir( './data' , function (error, filelist){ var filteredId = path.parse(request.params.pageId).base; fs.readFile(`data/${filteredId}`, 'utf8' , function (err, description){ var title = request.params.pageId; var sanitizedTitle = sanitizeHtml(title); var sanitizedDescription = sanitizeHtml(description, { allowedTags:[ 'h1' ] }); var list = template.list(filelist); var html = template.HTML(sanitizedTitle, list, `<h2>${sanitizedTitle}</h2>${sanitizedDescription}`, ` <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); }); }); }); app.get( '/create' , function (request, response){ fs.readdir( './data' , function (error, filelist){ var title = 'WEB - create' ; var list = template.list(filelist); 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); }); }); app.post( '/create_process' , function (request, response){ var post = request.body; var title = post.title; var description = post.description; fs.writeFile(`data/${title}`, description, 'utf8' , function (err){ response.writeHead(302, {Location: `/?id=${title}`}); response.end(); }); }); app.get( '/update/:pageId' , function (request, response){ fs.readdir( './data' , function (error, filelist){ var filteredId = path.parse(request.params.pageId).base; fs.readFile(`data/${filteredId}`, 'utf8' , function (err, description){ var title = request.params.pageId; var list = template.list(filelist); 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?id=${title}" >update</a>` ); response.send(html); }); }); }); app.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 (error){ fs.writeFile(`data/${title}`, description, 'utf8' , function (err){ response.redirect(`/?id=${title}`); }) }); }); app.post( '/delete_process' , function (request, response){ var post = request.body; var id = post.id; var filteredId = path.parse(id).base; fs.unlink(`data/${filteredId}`, function (error){ response.redirect( '/' ); }); }); app.listen(3000, function () { console.log( 'Example app listening on port 3000!' ) }); |
package.json
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 | { "name" : "web2-nodejs" , "version" : "1.0.0" , "description" : "" , "main" : "main.js" , "directories" : { "lib" : "lib" }, "scripts" : { "test" : "echo \"Error: no test specified\" && exit 1" }, "repository" : { "type" : "git" , }, "author" : "" , "license" : "ISC" , "bugs" : { }, "dependencies" : { "body-parser" : "^1.18.3" , "compression" : "^1.7.2" , "express" : "^4.16.3" , "sanitize-html" : "^1.18.2" } } |