Showing
7 changed files
with
124 additions
and
62 deletions
1 | +/* | ||
2 | +bin - 이 폴더 안에는 www.js 파일이 잇으며 www.js는 http 서버를 구동시키는 로직이 들어있다. | ||
3 | + | ||
4 | +node_modules - 모듈들이 설치되는 공간 | ||
5 | + | ||
6 | +public - http 서버의 root 폴더고 stylesheets나 images 같은 데이터를 저장할 때 사용한다. | ||
7 | + | ||
8 | +routes - 라우팅을 해주는 역할, 주소를 입력했을 때 어디로 연결해 줄지 결정해주는 javaScript 파일들을 모아놓는 곳입니다. | ||
9 | + | ||
10 | +views - 웹 브라우져에 보여질 디자인을 작성하는 곳이다 | ||
11 | +*/ | ||
12 | + | ||
13 | +// http웹 서버 구조를 쉽게 만들 수 있도록 도와주는 프레임워크 | ||
1 | var express = require('express'); | 14 | var express = require('express'); |
15 | +var session = require('express-session'); | ||
16 | + | ||
17 | +// 폴더와 파일의 경로를 쉽게 조작하도록 도와주는 모듈, https://horajjan.blog.me/221337515650 | ||
2 | var path = require('path'); | 18 | var path = require('path'); |
19 | + | ||
20 | +// favorites icon의 약자로 웹페이지나 웹사이트를 대표하는 아이콘 | ||
3 | var favicon = require('serve-favicon'); | 21 | var favicon = require('serve-favicon'); |
22 | + | ||
23 | +// 웹 요청에 대해 로그를 출력하는 미들웨어, 외부 모듈이기 때문에 별도로 설치해서 사용 | ||
4 | var logger = require('morgan'); | 24 | var logger = require('morgan'); |
25 | + | ||
26 | +// 쿠키를 제어하는 모듈 | ||
5 | var cookieParser = require('cookie-parser'); | 27 | var cookieParser = require('cookie-parser'); |
28 | + | ||
29 | +// post 요청 데이터를 추출하는 미들웨어 | ||
6 | var bodyParser = require('body-parser'); | 30 | var bodyParser = require('body-parser'); |
31 | + | ||
32 | +// mysql과 연동을 위한 모듈 | ||
7 | var mysql = require('mysql'); | 33 | var mysql = require('mysql'); |
34 | + | ||
35 | +// JQuery를 서버사이드에 맞게 수정한 것 | ||
8 | var cheerio = require('cheerio'); | 36 | var cheerio = require('cheerio'); |
37 | + | ||
38 | +// 웹페이지 크롤링과 파씽을 위한 HTTP 클라이언트 라이브러리 | ||
9 | var request = require('request'); | 39 | var request = require('request'); |
40 | + | ||
41 | +// 로그인, 인증관련 미들웨어 | ||
42 | +var passport = require('passport'); | ||
43 | + | ||
10 | var index = require('./routes/index'); | 44 | var index = require('./routes/index'); |
11 | var users = require('./routes/users'); | 45 | var users = require('./routes/users'); |
12 | var mytoons = require('./routes/mytoons'); | 46 | var mytoons = require('./routes/mytoons'); |
13 | -var yourtoons=require('./routes/yourtoons'); | 47 | +var yourtoons =require('./routes/yourtoons'); |
14 | -var passport = require('passport'); | ||
15 | var setting = require('./routes/setting'); | 48 | var setting = require('./routes/setting'); |
16 | -var session = require('express-session'); | ||
17 | - | ||
18 | 49 | ||
19 | -//port | 50 | +// 최초 로그인 성공시 (Strategy 성공시) 단 한번만 호출 |
20 | passport.serializeUser(function(user, done) { | 51 | passport.serializeUser(function(user, done) { |
21 | console.log('serialized'); | 52 | console.log('serialized'); |
22 | done(null, user); | 53 | done(null, user); |
23 | }); | 54 | }); |
55 | + | ||
56 | +// 페이지 리로드마다 (서버로 들어오는 requset) 로그인한 사용자인지 조회 | ||
24 | passport.deserializeUser(function(user, done) { | 57 | passport.deserializeUser(function(user, done) { |
25 | console.log('deserialized'); | 58 | console.log('deserialized'); |
26 | done(null, user); | 59 | done(null, user); |
... | @@ -33,13 +66,14 @@ app.set('views', path.join(__dirname, 'views')); | ... | @@ -33,13 +66,14 @@ app.set('views', path.join(__dirname, 'views')); |
33 | app.set('view engine', 'ejs'); | 66 | app.set('view engine', 'ejs'); |
34 | 67 | ||
35 | // uncomment after placing your favicon in /public | 68 | // uncomment after placing your favicon in /public |
36 | -//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); | 69 | +// app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); |
37 | app.use(logger('dev')); | 70 | app.use(logger('dev')); |
38 | app.use(bodyParser.json()); | 71 | app.use(bodyParser.json()); |
39 | app.use(bodyParser.urlencoded({ extended: false })); | 72 | app.use(bodyParser.urlencoded({ extended: false })); |
40 | app.use(cookieParser()); | 73 | app.use(cookieParser()); |
41 | app.use(express.static(path.join(__dirname, 'public'))); | 74 | app.use(express.static(path.join(__dirname, 'public'))); |
42 | 75 | ||
76 | +// | ||
43 | connection = mysql.createConnection({ | 77 | connection = mysql.createConnection({ |
44 | host : 'localhost', | 78 | host : 'localhost', |
45 | user : 'root', | 79 | user : 'root', |
... | @@ -48,12 +82,14 @@ connection = mysql.createConnection({ | ... | @@ -48,12 +82,14 @@ connection = mysql.createConnection({ |
48 | database : 'YTMT' | 82 | database : 'YTMT' |
49 | }); | 83 | }); |
50 | 84 | ||
85 | +// | ||
51 | app.use(session({ | 86 | app.use(session({ |
52 | secret: 'secrettexthere', | 87 | secret: 'secrettexthere', |
53 | saveUninitialized: true, | 88 | saveUninitialized: true, |
54 | resave: true | 89 | resave: true |
55 | })); | 90 | })); |
56 | 91 | ||
92 | +//app.use(express.static('views')); | ||
57 | app.use(passport.initialize()); | 93 | app.use(passport.initialize()); |
58 | app.use(passport.session()); | 94 | app.use(passport.session()); |
59 | app.use('/', index); | 95 | app.use('/', index); |
... | @@ -61,9 +97,8 @@ app.use('/users', users); | ... | @@ -61,9 +97,8 @@ app.use('/users', users); |
61 | app.use('/mytoons', mytoons); | 97 | app.use('/mytoons', mytoons); |
62 | app.use('/setting', setting); | 98 | app.use('/setting', setting); |
63 | app.use('/yourtoons', yourtoons); | 99 | app.use('/yourtoons', yourtoons); |
64 | -//app.use(express.static('views')); | ||
65 | 100 | ||
66 | -// catch 404 and forward to error handler | 101 | +// catch 404 and forward to error handler, for wrong page |
67 | app.use(function(req, res, next) { | 102 | app.use(function(req, res, next) { |
68 | var err = new Error('Not Found'); | 103 | var err = new Error('Not Found'); |
69 | err.status = 404; | 104 | err.status = 404; |
... | @@ -81,5 +116,6 @@ app.use(function(err, req, res, next) { | ... | @@ -81,5 +116,6 @@ app.use(function(err, req, res, next) { |
81 | res.render('error'); | 116 | res.render('error'); |
82 | }); | 117 | }); |
83 | 118 | ||
119 | +// | ||
84 | var server = app.listen(3000); | 120 | var server = app.listen(3000); |
85 | module.exports = app; | 121 | module.exports = app; | ... | ... |
1 | #!/usr/bin/env node | 1 | #!/usr/bin/env node |
2 | 2 | ||
3 | +// www : http 서버를 구동시키는 logic | ||
4 | + | ||
3 | /** | 5 | /** |
4 | * Module dependencies. | 6 | * Module dependencies. |
5 | */ | 7 | */ |
... | @@ -12,7 +14,7 @@ var http = require('http'); | ... | @@ -12,7 +14,7 @@ var http = require('http'); |
12 | * Get port from environment and store in Express. | 14 | * Get port from environment and store in Express. |
13 | */ | 15 | */ |
14 | 16 | ||
15 | -var port = normalizePort(process.env.PORT || '9000'); | 17 | +var port = normalizePort(process.env.PORT || '3000'); |
16 | app.set('port', port); | 18 | app.set('port', port); |
17 | 19 | ||
18 | /** | 20 | /** | ... | ... |
1 | var express = require('express'); | 1 | var express = require('express'); |
2 | var cheerio = require('cheerio'); | 2 | var cheerio = require('cheerio'); |
3 | var request = require('request'); | 3 | var request = require('request'); |
4 | -var router = express.Router(); | ||
5 | var mysql = require('mysql'); | 4 | var mysql = require('mysql'); |
5 | + | ||
6 | +// 설명 | ||
6 | var client = require('cheerio-httpcli'); | 7 | var client = require('cheerio-httpcli'); |
7 | -var passport = require('passport'), | 8 | +var passport = require('passport'), KakaoStrategy = require('passport-kakao').Strategy; |
8 | - KakaoStrategy = require('passport-kakao').Strategy; | 9 | +var router = express.Router(); |
9 | 10 | ||
11 | +// 설명 | ||
10 | passport.use(new KakaoStrategy({ | 12 | passport.use(new KakaoStrategy({ |
13 | + | ||
11 | clientID : 'bd2e610396fb7bbb84cf91a786b3cc72', | 14 | clientID : 'bd2e610396fb7bbb84cf91a786b3cc72', |
12 | callbackURL :'/auth/login/kakao/callback', | 15 | callbackURL :'/auth/login/kakao/callback', |
13 | clientSecret : 'eUtJGtlLoCZJufevp3LKfDP0KOtZUV7R' | 16 | clientSecret : 'eUtJGtlLoCZJufevp3LKfDP0KOtZUV7R' |
14 | - }, | ||
15 | - function(accessToken, refreshToken,params, profile, done){ | ||
16 | - //사용자 정보는 profile에 | ||
17 | - loginByThirdparty(accessToken, refreshToken, profile); | ||
18 | 17 | ||
18 | + }, function(accessToken, refreshToken,params, profile, done){ | ||
19 | + | ||
20 | + //사용자 정보 -> profile | ||
21 | + loginByThirdparty(accessToken, refreshToken, profile); | ||
19 | console.log("(!)로그인 : " + profile._json.id+"("+profile._json.properties.nickname +")"); | 22 | console.log("(!)로그인 : " + profile._json.id+"("+profile._json.properties.nickname +")"); |
23 | + | ||
20 | //return done(null,profile) | 24 | //return done(null,profile) |
21 | return done(null, { | 25 | return done(null, { |
22 | 'user_id': profile._json.id, | 26 | 'user_id': profile._json.id, |
23 | 'nickname': profile._json.properties.nickname | 27 | 'nickname': profile._json.properties.nickname |
28 | + | ||
24 | }); | 29 | }); |
25 | } | 30 | } |
26 | )); | 31 | )); |
27 | 32 | ||
28 | -// kakao 로그인 | 33 | +// kakao 로그인, // passport.authenticate('kakao',{state: "myStateValue"}) |
29 | -router.get('/auth/login/kakao', | 34 | +router.get('/auth/login/kakao', passport.authenticate('kakao')); |
30 | - // passport.authenticate('kakao',{state: "myStateValue"}) | ||
31 | - passport.authenticate('kakao') | ||
32 | -); | ||
33 | 35 | ||
34 | // kakao 로그인 연동 콜백 | 36 | // kakao 로그인 연동 콜백 |
35 | -router.get('/auth/login/kakao/callback', | 37 | +router.get('/auth/login/kakao/callback', passport.authenticate('kakao', { |
36 | - passport.authenticate('kakao', { | 38 | + |
37 | //session: false, | 39 | //session: false, |
38 | successRedirect: '/mytoons', | 40 | successRedirect: '/mytoons', |
39 | failureRedirect: '/' | 41 | failureRedirect: '/' |
40 | }) | 42 | }) |
41 | ); | 43 | ); |
42 | 44 | ||
45 | +// 설명 | ||
43 | function loginByThirdparty(accessToken, refreshToken, profile) { | 46 | function loginByThirdparty(accessToken, refreshToken, profile) { |
44 | - //예전 코드는 MySQL 버젼이 맞지 않음 | 47 | + // 예전 코드는 MySQL 버젼이 맞지 않음 |
45 | // var sql = 'INSERT INTO `user`(id) VALUES(?) ON DUPLICATE KEY(PRIMARY) UPDATE id=(?);' | 48 | // var sql = 'INSERT INTO `user`(id) VALUES(?) ON DUPLICATE KEY(PRIMARY) UPDATE id=(?);' |
46 | var sql = "INSERT INTO `user` (id) VALUES (?) ON DUPLICATE KEY UPDATE id=id"; | 49 | var sql = "INSERT INTO `user` (id) VALUES (?) ON DUPLICATE KEY UPDATE id=id"; |
47 | var kid=[profile._json.id]; | 50 | var kid=[profile._json.id]; |
... | @@ -54,27 +57,38 @@ function loginByThirdparty(accessToken, refreshToken, profile) { | ... | @@ -54,27 +57,38 @@ function loginByThirdparty(accessToken, refreshToken, profile) { |
54 | }); | 57 | }); |
55 | } | 58 | } |
56 | 59 | ||
60 | +// 설명 | ||
57 | router.get('/auth/logout/kakao',function (req,res) { | 61 | router.get('/auth/logout/kakao',function (req,res) { |
58 | req.logout(); | 62 | req.logout(); |
59 | res.redirect('/'); | 63 | res.redirect('/'); |
60 | }) | 64 | }) |
61 | 65 | ||
62 | -allWebtoons = new Array(); | 66 | +// |
63 | - | ||
64 | function getLatestToon(titleid, day ,cb) { | 67 | function getLatestToon(titleid, day ,cb) { |
68 | + | ||
65 | } | 69 | } |
66 | 70 | ||
71 | +// 설명 | ||
72 | +allWebtoons = new Array(); | ||
73 | + | ||
74 | +// 설명 | ||
67 | function getAllToons() { | 75 | function getAllToons() { |
76 | + | ||
68 | allWebtoonList = new Array(); | 77 | allWebtoonList = new Array(); |
69 | -//월요일 다음 웹툰 | 78 | + |
79 | + //월요일 다음 웹툰 | ||
70 | var mon='mon'; | 80 | var mon='mon'; |
71 | var mon_name='MON'; | 81 | var mon_name='MON'; |
72 | var daum = `http://webtoon.daum.net/data/pc/webtoon/list_serialized/${mon}?timeStamp=1515819276574`; | 82 | var daum = `http://webtoon.daum.net/data/pc/webtoon/list_serialized/${mon}?timeStamp=1515819276574`; |
73 | var site = 'daum'; | 83 | var site = 'daum'; |
84 | + | ||
74 | client.fetch(daum, {}, function (err, $, res, body) { | 85 | client.fetch(daum, {}, function (err, $, res, body) { |
86 | + | ||
75 | var data = JSON.parse(body); | 87 | var data = JSON.parse(body); |
76 | var list = data["data"]; | 88 | var list = data["data"]; |
89 | + | ||
77 | list.forEach(function (item, idx) { | 90 | list.forEach(function (item, idx) { |
91 | + | ||
78 | var webtoon_link = 'http://webtoon.daum.net/webtoon/view/' + item.nickname.toString(); | 92 | var webtoon_link = 'http://webtoon.daum.net/webtoon/view/' + item.nickname.toString(); |
79 | var webtoon = { | 93 | var webtoon = { |
80 | toon_index: item.id, | 94 | toon_index: item.id, |
... | @@ -85,19 +99,22 @@ function getAllToons() { | ... | @@ -85,19 +99,22 @@ function getAllToons() { |
85 | site: site, | 99 | site: site, |
86 | latest: 0 | 100 | latest: 0 |
87 | }; | 101 | }; |
102 | + | ||
88 | allWebtoonList.push(webtoon); | 103 | allWebtoonList.push(webtoon); |
89 | }); | 104 | }); |
90 | - | ||
91 | }); | 105 | }); |
92 | 106 | ||
93 | -//화요일 다음 웹툰 | 107 | + //화요일 다음 웹툰 |
94 | var tue='tue'; | 108 | var tue='tue'; |
95 | var tue_name='TUE'; | 109 | var tue_name='TUE'; |
96 | var daum1 = `http://webtoon.daum.net/data/pc/webtoon/list_serialized/${tue}?timeStamp=1515819276574`; | 110 | var daum1 = `http://webtoon.daum.net/data/pc/webtoon/list_serialized/${tue}?timeStamp=1515819276574`; |
111 | + | ||
97 | client.fetch(daum1, {}, function (err, $, res, body) { | 112 | client.fetch(daum1, {}, function (err, $, res, body) { |
98 | var data = JSON.parse(body); | 113 | var data = JSON.parse(body); |
99 | var list = data["data"]; | 114 | var list = data["data"]; |
115 | + | ||
100 | list.forEach(function(item, idx){ | 116 | list.forEach(function(item, idx){ |
117 | + | ||
101 | var webtoon_link='http://webtoon.daum.net/webtoon/view/'+item.nickname.toString(); | 118 | var webtoon_link='http://webtoon.daum.net/webtoon/view/'+item.nickname.toString(); |
102 | var webtoon= { | 119 | var webtoon= { |
103 | toon_index: item.id, | 120 | toon_index: item.id, |
... | @@ -108,17 +125,18 @@ function getAllToons() { | ... | @@ -108,17 +125,18 @@ function getAllToons() { |
108 | site : site, | 125 | site : site, |
109 | latest : 0 | 126 | latest : 0 |
110 | }; | 127 | }; |
128 | + | ||
111 | allWebtoonList.push(webtoon); | 129 | allWebtoonList.push(webtoon); |
112 | }); | 130 | }); |
113 | - | ||
114 | }); | 131 | }); |
115 | 132 | ||
116 | -//수요일 다음 웹툰 | 133 | + //수요일 다음 웹툰 |
117 | var wed='wed'; | 134 | var wed='wed'; |
118 | var wed_name='WED'; | 135 | var wed_name='WED'; |
119 | var daum2 = `http://webtoon.daum.net/data/pc/webtoon/list_serialized/${wed}?timeStamp=1515819276574`; | 136 | var daum2 = `http://webtoon.daum.net/data/pc/webtoon/list_serialized/${wed}?timeStamp=1515819276574`; |
120 | 137 | ||
121 | client.fetch(daum2, {}, function (err, $, res, body) { | 138 | client.fetch(daum2, {}, function (err, $, res, body) { |
139 | + | ||
122 | var data = JSON.parse(body); | 140 | var data = JSON.parse(body); |
123 | var list = data["data"]; | 141 | var list = data["data"]; |
124 | 142 | ||
... | @@ -134,19 +152,23 @@ function getAllToons() { | ... | @@ -134,19 +152,23 @@ function getAllToons() { |
134 | site : site, | 152 | site : site, |
135 | latest : 0 | 153 | latest : 0 |
136 | }; | 154 | }; |
155 | + | ||
137 | allWebtoonList.push(webtoon); | 156 | allWebtoonList.push(webtoon); |
138 | }); | 157 | }); |
139 | - | ||
140 | }); | 158 | }); |
141 | 159 | ||
142 | -//목요일 다음 웹툰 | 160 | + //목요일 다음 웹툰 |
143 | var thu='thu'; | 161 | var thu='thu'; |
144 | var daum3 =`http://webtoon.daum.net/data/pc/webtoon/list_serialized/${thu}?timeStamp=1515819276574`; | 162 | var daum3 =`http://webtoon.daum.net/data/pc/webtoon/list_serialized/${thu}?timeStamp=1515819276574`; |
145 | var thu_name='THU'; | 163 | var thu_name='THU'; |
164 | + | ||
146 | client.fetch(daum3, {}, function (err, $, res, body) { | 165 | client.fetch(daum3, {}, function (err, $, res, body) { |
166 | + | ||
147 | var data = JSON.parse(body); | 167 | var data = JSON.parse(body); |
148 | var list = data["data"]; | 168 | var list = data["data"]; |
169 | + | ||
149 | list.forEach(function(item, idx){ | 170 | list.forEach(function(item, idx){ |
171 | + | ||
150 | var webtoon_link='http://webtoon.daum.net/webtoon/view/'+item.nickname.toString(); | 172 | var webtoon_link='http://webtoon.daum.net/webtoon/view/'+item.nickname.toString(); |
151 | var webtoon= { | 173 | var webtoon= { |
152 | toon_index: item.id, | 174 | toon_index: item.id, |
... | @@ -157,12 +179,13 @@ function getAllToons() { | ... | @@ -157,12 +179,13 @@ function getAllToons() { |
157 | site : site, | 179 | site : site, |
158 | latest : 0 | 180 | latest : 0 |
159 | }; | 181 | }; |
182 | + | ||
160 | allWebtoonList.push(webtoon); | 183 | allWebtoonList.push(webtoon); |
161 | }); | 184 | }); |
162 | 185 | ||
163 | }); | 186 | }); |
164 | 187 | ||
165 | -//금요일 다음 웹툰 | 188 | + //금요일 다음 웹툰 |
166 | var fri='fri'; | 189 | var fri='fri'; |
167 | var daum4 =`http://webtoon.daum.net/data/pc/webtoon/list_serialized/${fri}?timeStamp=1515819276574`; | 190 | var daum4 =`http://webtoon.daum.net/data/pc/webtoon/list_serialized/${fri}?timeStamp=1515819276574`; |
168 | var fri_name='FRI'; | 191 | var fri_name='FRI'; |
... | @@ -185,7 +208,7 @@ function getAllToons() { | ... | @@ -185,7 +208,7 @@ function getAllToons() { |
185 | 208 | ||
186 | }); | 209 | }); |
187 | 210 | ||
188 | -//토요일 다음 웹툰 | 211 | + //토요일 다음 웹툰 |
189 | var sat='sat'; | 212 | var sat='sat'; |
190 | var daum5 =`http://webtoon.daum.net/data/pc/webtoon/list_serialized/${sat}?timeStamp=1515819276574`; | 213 | var daum5 =`http://webtoon.daum.net/data/pc/webtoon/list_serialized/${sat}?timeStamp=1515819276574`; |
191 | var sat_name='SAT'; | 214 | var sat_name='SAT'; |
... | @@ -208,7 +231,7 @@ function getAllToons() { | ... | @@ -208,7 +231,7 @@ function getAllToons() { |
208 | 231 | ||
209 | }); | 232 | }); |
210 | 233 | ||
211 | -//일요일 다음 웹툰 | 234 | + //일요일 다음 웹툰 |
212 | var sun='sun'; | 235 | var sun='sun'; |
213 | var daum6 = `http://webtoon.daum.net/data/pc/webtoon/list_serialized/${sun}?timeStamp=1515819276574`; | 236 | var daum6 = `http://webtoon.daum.net/data/pc/webtoon/list_serialized/${sun}?timeStamp=1515819276574`; |
214 | var sun_name='SUN'; | 237 | var sun_name='SUN'; |
... | @@ -216,7 +239,6 @@ function getAllToons() { | ... | @@ -216,7 +239,6 @@ function getAllToons() { |
216 | var data = JSON.parse(body); | 239 | var data = JSON.parse(body); |
217 | var list = data["data"]; | 240 | var list = data["data"]; |
218 | list.forEach(function(item, idx){ | 241 | list.forEach(function(item, idx){ |
219 | - //다음 웹툰 아이디, 제목, 요일 | ||
220 | var webtoon_link='http://webtoon.daum.net/webtoon/view/'+item.nickname.toString(); | 242 | var webtoon_link='http://webtoon.daum.net/webtoon/view/'+item.nickname.toString(); |
221 | var webtoon= { | 243 | var webtoon= { |
222 | toon_index: item.id, | 244 | toon_index: item.id, |
... | @@ -231,7 +253,7 @@ function getAllToons() { | ... | @@ -231,7 +253,7 @@ function getAllToons() { |
231 | }); | 253 | }); |
232 | }); | 254 | }); |
233 | 255 | ||
234 | -//네이버 웹툰 | 256 | + //네이버 웹툰 |
235 | var allWeeklyToonsUrl = "http://comic.naver.com/webtoon/weekday.nhn"; | 257 | var allWeeklyToonsUrl = "http://comic.naver.com/webtoon/weekday.nhn"; |
236 | request(allWeeklyToonsUrl,function (err, res, html) { | 258 | request(allWeeklyToonsUrl,function (err, res, html) { |
237 | if(!err){ | 259 | if(!err){ |
... | @@ -255,19 +277,20 @@ function getAllToons() { | ... | @@ -255,19 +277,20 @@ function getAllToons() { |
255 | }; | 277 | }; |
256 | allWebtoonList.push(webtoon); | 278 | allWebtoonList.push(webtoon); |
257 | }); | 279 | }); |
280 | + | ||
258 | p.then(function() { | 281 | p.then(function() { |
259 | i = 0; | 282 | i = 0; |
260 | allWebtoonList.forEach(function (webtoon) { | 283 | allWebtoonList.forEach(function (webtoon) { |
261 | var sql= "INSERT INTO `toon` (toon_index, name, thum_link, webtoon_link, week, site, latest) VALUES(?) ON DUPLICATE KEY UPDATE latest=latest"; | 284 | var sql= "INSERT INTO `toon` (toon_index, name, thum_link, webtoon_link, week, site, latest) VALUES(?) ON DUPLICATE KEY UPDATE latest=latest"; |
262 | var values=[webtoon.toon_index, webtoon.name, webtoon.thum_link, webtoon.webtoon_link,webtoon.week, webtoon.site, webtoon.latest]; | 285 | var values=[webtoon.toon_index, webtoon.name, webtoon.thum_link, webtoon.webtoon_link,webtoon.week, webtoon.site, webtoon.latest]; |
286 | + | ||
263 | connection.query(sql,[values],function(err,result){ | 287 | connection.query(sql,[values],function(err,result){ |
264 | if (err) { | 288 | if (err) { |
265 | console.log("웹툰 DB 에러 : " + err); | 289 | console.log("웹툰 DB 에러 : " + err); |
266 | } else { | 290 | } else { |
267 | - // console.log("웹툰 DB처리 완료!"); | 291 | + console.log("웹툰 DB처리 완료!"); |
268 | } | 292 | } |
269 | }); | 293 | }); |
270 | - //}); | ||
271 | }) | 294 | }) |
272 | }); | 295 | }); |
273 | } | 296 | } |
... | @@ -275,24 +298,25 @@ function getAllToons() { | ... | @@ -275,24 +298,25 @@ function getAllToons() { |
275 | allWebtoons = allWebtoonList; | 298 | allWebtoons = allWebtoonList; |
276 | }; | 299 | }; |
277 | 300 | ||
278 | -getAllToons(); | ||
279 | //처음 한번 수행 | 301 | //처음 한번 수행 |
280 | -setInterval(getAllToons,5*60*1000); | 302 | +getAllToons(); |
303 | + | ||
281 | //5분에 한번 수행 | 304 | //5분에 한번 수행 |
305 | +setInterval(getAllToons,5*60*1000); | ||
282 | 306 | ||
283 | /* GET home page. */ | 307 | /* GET home page. */ |
284 | -router.get('/', | 308 | +router.get('/', function(req,res,next) { |
285 | - function(req,res,next){ | 309 | + |
286 | - if(req.isAuthenticated()){ | 310 | + if(req.isAuthenticated()) { |
287 | res.redirect('/mytoons'); | 311 | res.redirect('/mytoons'); |
288 | - console.log("(!)이미 로그인"); | 312 | + console.log("(!)Already logined"); |
289 | - }else{ | 313 | + } else { |
290 | console.log("(!)로그인세션 없음"); | 314 | console.log("(!)로그인세션 없음"); |
291 | res.render('index',{ | 315 | res.render('index',{ |
292 | title: "니툰내툰", | 316 | title: "니툰내툰", |
293 | list: allWebtoons | 317 | list: allWebtoons |
294 | }); | 318 | }); |
295 | } | 319 | } |
296 | - }); | 320 | +}); |
297 | 321 | ||
298 | module.exports = router; | 322 | module.exports = router; | ... | ... |
... | @@ -2,39 +2,38 @@ var express = require('express'); | ... | @@ -2,39 +2,38 @@ var express = require('express'); |
2 | var router = express.Router(); | 2 | var router = express.Router(); |
3 | 3 | ||
4 | function addMyToons(id,index,cb){ | 4 | function addMyToons(id,index,cb){ |
5 | - connection.query("INSERT INTO user_toon_relation SET ?;", | 5 | + connection.query("INSERT INTO user_toon_relation SET ?;", {user_id : id,toon_index : index},function (err) { |
6 | - {user_id : id,toon_index : index},function (err) { | 6 | + |
7 | if(err) { | 7 | if(err) { |
8 | throw err; | 8 | throw err; |
9 | - console.log("내 웹툰 추가중 에러!") | 9 | + console.log("내 웹툰 추가 중 에러!") |
10 | } else{ | 10 | } else{ |
11 | // alert("추가되었습니다.") | 11 | // alert("추가되었습니다.") |
12 | cb(); | 12 | cb(); |
13 | } | 13 | } |
14 | }); | 14 | }); |
15 | } | 15 | } |
16 | + | ||
16 | //내툰 수정하기 | 17 | //내툰 수정하기 |
17 | router.post('/toggle_toon',function(req,res,next){ | 18 | router.post('/toggle_toon',function(req,res,next){ |
18 | var index = req.body.toon_index; | 19 | var index = req.body.toon_index; |
19 | var id = req.user.user_id; | 20 | var id = req.user.user_id; |
20 | - connection.query("SELECT COUNT(*) FROM user_toon_relation WHERE user_id='"+id+"' && toon_index='"+index+"'", | 21 | + connection.query("SELECT COUNT(*) FROM user_toon_relation WHERE user_id='"+id+"' && toon_index='"+index+"'", [id,index], function (err, rows,result) { |
21 | - [id,index], function (err, rows,result) { | 22 | + if(err) { |
22 | - if(err){ | 23 | + console.log("내 웹툰 등록 중 에러!"); |
23 | - console.log("내웹툰 등록중 에러!"); | 24 | + } else { |
24 | - }else{ | ||
25 | var count = rows[0]["COUNT(*)"]; | 25 | var count = rows[0]["COUNT(*)"]; |
26 | - if(count>0){//이미 등록되어 있는 것이라면, | 26 | + if(count>0) {//이미 등록되어 있는 것이라면, |
27 | - connection.query("DELETE FROM user_toon_relation WHERE user_id='"+id+"' && toon_index='"+index+"';", | 27 | + connection.query("DELETE FROM user_toon_relation WHERE user_id='"+id+"' && toon_index='"+index+"';", [id, index],function (err, rows, result) { |
28 | - [id, index],function (err, rows, result) { | ||
29 | if(err) { | 28 | if(err) { |
30 | console.log("내 웹툰 제거중 에러!"); | 29 | console.log("내 웹툰 제거중 에러!"); |
31 | throw err; | 30 | throw err; |
32 | - }else{ | 31 | + } else { |
33 | - // alert("제거되었습니다.") | 32 | + //alert("제거되었습니다.") |
34 | res.redirect('/setting'); | 33 | res.redirect('/setting'); |
35 | } | 34 | } |
36 | }); | 35 | }); |
37 | - }else{ | 36 | + } else { |
38 | addMyToons(id,index,function(){ | 37 | addMyToons(id,index,function(){ |
39 | res.redirect('/setting'); | 38 | res.redirect('/setting'); |
40 | }); | 39 | }); |
... | @@ -43,6 +42,7 @@ router.post('/toggle_toon',function(req,res,next){ | ... | @@ -43,6 +42,7 @@ router.post('/toggle_toon',function(req,res,next){ |
43 | }); | 42 | }); |
44 | }); | 43 | }); |
45 | 44 | ||
45 | +// | ||
46 | function getMyToons(id,cb){ | 46 | function getMyToons(id,cb){ |
47 | //mysql5.7 syntax에 맞게 수정 => 로그인한 유저의 | 47 | //mysql5.7 syntax에 맞게 수정 => 로그인한 유저의 |
48 | var sqlquery = "SELECT t.toon_index, t.name, t.thum_link, t.webtoon_link, t.week, t.site FROM user u, user_toon_relation ur, toon t WHERE u.id = '"+id+"' && u.id=ur.user_id && t.toon_index=ur.toon_index;"; | 48 | var sqlquery = "SELECT t.toon_index, t.name, t.thum_link, t.webtoon_link, t.week, t.site FROM user u, user_toon_relation ur, toon t WHERE u.id = '"+id+"' && u.id=ur.user_id && t.toon_index=ur.toon_index;"; | ... | ... |
-
Please register or login to post a comment