CRUD + Auth MYSQL버전을 여러 개의 파일로 나누기3
기존의 app_mysql.js를 복사해서 app_mysql2.js를 만든다.
그리고 먼저 예전에 views_mysql에 있던 jade 파일들을 복사해서 /views/mysql/topic폴더에 넣는다.
그리고 jade 폴더가 바꼈으므로 다음의 소스를 수정해준다.
var express = require('express');//익스프레스를 가져옴
var bodyParser = require('body-parser')
var conn = mysql.createConnection({
conn.connect();//database 접속 완료
var multer = require('multer');//업로드를 위한 multer를 가져옴
var _storage = multer.diskStorage({
destination: function (req, file, cb) {//cb는 callback함수의 약자
cb(null, 'uploads/')//2번째 인자는 파일이 저장될 인자
filename: function (req, file, cb) {//cb는 callback함수의 약자
cb(null, file.originalname)//파일의 이름을 지정함
var upload = multer({ storage: _storage });
app.use(bodyParser.urlencoded({ extended: false }));//body parser를 사용함
app.locals.pretty = true;//템플릿 줄바꿈
app.set('views', './views/mysql');//템플릿 폴더 위치 표시
app.set('view engine', 'jade');//템플릿 엔진을 jade로 명시함
app.use('/user', express.static('uploads'));//여기로 폴더에 있는 그림을 접근할 수 있음
app.get('/upload', function(req, res){
//2번째 파라미터는 사용자가 전송한 데이터에서 파일이 포함되면
//req안에 file이라는 프로퍼티를 추가함 미들웨어임
//userfile은 jade에서 input type='file'의 name값
app.post('/upload', upload.single('userfile'), function(req, res){
res.send('Uploaded : '+req.file.filename);
app.get('/topic/add', function(req, res){
var sql = 'SELECT id, title FROM topic';//글목록을 보여주기 위한 쿼리문
conn.query(sql, function(err, topics, fields){
res.status(500).send('Internal Server Error');
res.render('topic/add', {topics:topics});
app.get(['/topic/:id/edit'], function(req, res){
var sql = 'SELECT id, title FROM topic';//글목록을 보여주기 위한 쿼리문
conn.query(sql, function(err, topics, fields){
var id = req.params.id;//:id값을 가져옴
var sql = 'SELECT * FROM topic WHERE id=?';
conn.query(sql, [id], function(err, topic, fields){
res.status(500).send('Internal Server Error');
res.render('topic/edit', {topics:topics, topic:topic[0]});//topic은 쿼리문의 데이터 한개만 넘겨줌
console.log('There is no id.');
res.staus(500).send('Internal server error');
app.post(['/topic/:id/edit'], function(req, res){
var description = req.body.description;
var sql = 'UPDATE topic SET title=?, description=?, author=? WHERE id=?';
conn.query(sql, [title, description, author, id], function(err, result, fields){
res.status(500).send('Internal Server Error');
//res.send(result);//이걸로 먼저 result값을 보고서 해야한다.
res.redirect('/topic/'+id);//변경후 이동 시켜라
app.get('/topic/:id/delete', function(req, res){
var sql = 'SELECT id, title FROM topic';//글목록을 보여주기 위한 쿼리문
conn.query(sql, function(err, topics, fields){
var sql = 'SELECT * FROM topic WHERE id=?';
conn.query(sql, [id], function(err, topic){
res.status(500).send('Internal Server Error');
console.log('There is no record.');
res.status(500).send('Internal Server Error');
res.render('topic/delete', {topics:topics, topic:topic[0]});
app.post('/topic/:id/delete', function(req, res){
var sql = 'DELETE FROM topic WHERE id=?';
conn.query(sql, [id], function(err, result){
res.redirect('/topic/');//삭제되면 초기화면으로감
app.post('/topic/add', function(req, res){
var title = req.body.title;//제목과 본문의 내용을 가져옴
var description = req.body.description;
var sql = 'INSERT INTO topic(title, description, author) VALUES(?, ?, ?)';
conn.query(sql, [title, description, author], function(err, result, fields){
res.status(500).send('Internal Server Error');
res.redirect('/topic/'+result.insertId);//insertId는 입력한 행의 id값을 의미함
//[]는 배열을 의미 둘다 여기로 접근 가능하다는 뜻
app.get(['/topic', '/topic/:id'], function(req, res){
var sql = 'SELECT id, title FROM topic';//글목록을 보여주기 위한 쿼리문
conn.query(sql, function(err, topics, fields){
var id = req.params.id;//:id값을 가져옴
var sql = 'SELECT * FROM topic WHERE id=?';
conn.query(sql, [id], function(err, topic, fields){
res.status(500).send('Internal Server Error');
res.render('topic/view', {topics:topics, topic:topic[0]});//topic은 쿼리문의 데이터 한개만 넘겨줌
res.render('topic/view', {topics:topics});//view.jade파일을 출력함 쿼리문에서 가져온 값을 넘겨줌
console.log('Connected, 3003 port!');
윗부분을 하나의 layout.jade라는 파일에 복사 붙여넣기를 하고 jade extends기능을 이용해서 중복을 없애자
a(href='/topic') Server Side Javascript
a(href='/topic/'+topic.id)= topic.title
form(action='/topic/add' method='post')
input(type='text' name='title' placeholder='title')
textarea(name='description' placeholder='description')
input(type='text' name='author' placeholder='author')
/views/mysql/topic/delete.jade
form(action='/topic/'+topic.id+'/delete' method='post')
input(type='submit' value='YES')
form(action='/topic/'+topic.id+'/edit' method='post')
input(type='text' name='title' value=topic.title placeholder='title')
textarea(name='description' placeholder='description')
input(type='text' name='author' value=topic.author placeholder='author')
/views/mysql/topic/upload.jade
form(action='upload' method='post' enctype='multipart/form-data')
input(type='file' name='userfile')
a(href='/topic/'+topic.id+'/edit') edit
'프로그래밍 > Node.js' 카테고리의 다른 글
Node.js 생활코딩 정리 – CRUD + Auth MYSQL 버전 모두 합치기 (0) | 2016.12.19 |
---|---|
Node.js 생활코딩 정리 - CRUD + Auth MYSQL 버전 라우트 복잡도 낮추기 (0) | 2016.12.18 |
Node.js 생활코딩 정리 – CRUD+Auth MYSQL버전을 여러개의 파일로 나누기2 (0) | 2016.12.14 |
Node.js 생활코딩 정리 – CRUD + Auth MYSQL버전을 여러개의 파일로 나누기 1 (0) | 2016.12.13 |
Node.js 생활코딩 정리 – 사용자 정의 모듈 만들기 (0) | 2016.12.11 |
Node.js 생활코딩 정리 – jade extends 란? (0) | 2016.12.10 |
Node.js 생활코딩 정리 – Mysql을 이용한 Login 구현 (0) | 2016.12.09 |
Node.js 생활코딩 정리 – MYSQL을 이용한 회원가입(Register) (0) | 2016.12.08 |