Showing
10 changed files
with
96 additions
and
42 deletions
... | @@ -24,6 +24,7 @@ const MealCard = (props) => { | ... | @@ -24,6 +24,7 @@ const MealCard = (props) => { |
24 | headers: { | 24 | headers: { |
25 | 'Content-Type': 'application/json', | 25 | 'Content-Type': 'application/json', |
26 | 'authorization': user | 26 | 'authorization': user |
27 | + | ||
27 | } | 28 | } |
28 | }).then(response => response.json()) | 29 | }).then(response => response.json()) |
29 | .then(result => { | 30 | .then(result => { | ... | ... |
... | @@ -14,6 +14,7 @@ const UserCards = (props) => { | ... | @@ -14,6 +14,7 @@ const UserCards = (props) => { |
14 | headers: { | 14 | headers: { |
15 | 'Content-Type': 'application/json', | 15 | 'Content-Type': 'application/json', |
16 | 'authorization': user | 16 | 'authorization': user |
17 | + | ||
17 | } | 18 | } |
18 | }).then(response => response.json()) | 19 | }).then(response => response.json()) |
19 | .then( result => { | 20 | .then( result => { |
... | @@ -47,7 +48,7 @@ const UserCards = (props) => { | ... | @@ -47,7 +48,7 @@ const UserCards = (props) => { |
47 | <br/> | 48 | <br/> |
48 | <Container style={{'paddingTop':'1.2rem'}}> | 49 | <Container style={{'paddingTop':'1.2rem'}}> |
49 | <Row xs="2" sm="2" md="4"> | 50 | <Row xs="2" sm="2" md="4"> |
50 | - {picks.map((data, index) => | 51 | + {picks && picks.map((data, index) => |
51 | <Col key = {index}> | 52 | <Col key = {index}> |
52 | <PickedCard | 53 | <PickedCard |
53 | key = {index} | 54 | key = {index} | ... | ... |
... | @@ -26,7 +26,7 @@ const LandingPage = (props) => { | ... | @@ -26,7 +26,7 @@ const LandingPage = (props) => { |
26 | useEffect(() => { | 26 | useEffect(() => { |
27 | const fetchData = async () => { | 27 | const fetchData = async () => { |
28 | const result = await axios( | 28 | const result = await axios( |
29 | - '/api/datas', | 29 | + '/api/datas' |
30 | ); | 30 | ); |
31 | setDatas(result.data); | 31 | setDatas(result.data); |
32 | }; | 32 | }; | ... | ... |
... | @@ -27,8 +27,7 @@ const MenuPage = (props) => { | ... | @@ -27,8 +27,7 @@ const MenuPage = (props) => { |
27 | useEffect(() => { | 27 | useEffect(() => { |
28 | const fetchData = async () => { | 28 | const fetchData = async () => { |
29 | const result = await axios( | 29 | const result = await axios( |
30 | - '/api/datas', | 30 | + '/api/datas' |
31 | - // localhost로 바꾸기 | ||
32 | ); | 31 | ); |
33 | setDatas(result.data); | 32 | setDatas(result.data); |
34 | setIsLoading(true); | 33 | setIsLoading(true); |
... | @@ -169,7 +168,7 @@ const MenuPage = (props) => { | ... | @@ -169,7 +168,7 @@ const MenuPage = (props) => { |
169 | {filteredDatas.map((data, index) => | 168 | {filteredDatas.map((data, index) => |
170 | <Col> | 169 | <Col> |
171 | <MealCard | 170 | <MealCard |
172 | - key = {index} | 171 | + key = {data.id} |
173 | id = {data.id} | 172 | id = {data.id} |
174 | name = {data.name} | 173 | name = {data.name} |
175 | address = {data.address} | 174 | address = {data.address} | ... | ... |
... | @@ -14,6 +14,7 @@ const MypickPage = () => { | ... | @@ -14,6 +14,7 @@ const MypickPage = () => { |
14 | headers: { | 14 | headers: { |
15 | 'Content-Type': 'application/json', | 15 | 'Content-Type': 'application/json', |
16 | 'authorization': user | 16 | 'authorization': user |
17 | + | ||
17 | } | 18 | } |
18 | }).then(response => response.json()) | 19 | }).then(response => response.json()) |
19 | .then(result => { | 20 | .then(result => { | ... | ... |
... | @@ -13,8 +13,10 @@ const SigninPage = (props) => { | ... | @@ -13,8 +13,10 @@ const SigninPage = (props) => { |
13 | method: 'POST', | 13 | method: 'POST', |
14 | headers: { | 14 | headers: { |
15 | 'Content-Type': 'application/json' | 15 | 'Content-Type': 'application/json' |
16 | + | ||
16 | }, | 17 | }, |
17 | - body: JSON.stringify(user) | 18 | + body: JSON.stringify(user), |
19 | + | ||
18 | }).then(response => response.json()) | 20 | }).then(response => response.json()) |
19 | } | 21 | } |
20 | 22 | ... | ... |
... | @@ -30,11 +30,12 @@ const SigninPage = (props) => { | ... | @@ -30,11 +30,12 @@ const SigninPage = (props) => { |
30 | body: JSON.stringify(signupInfo), | 30 | body: JSON.stringify(signupInfo), |
31 | headers: { | 31 | headers: { |
32 | "Content-Type": "application/json" | 32 | "Content-Type": "application/json" |
33 | + | ||
33 | } | 34 | } |
34 | }; | 35 | }; |
35 | 36 | ||
36 | if( username && password ) { | 37 | if( username && password ) { |
37 | - fetch("http://localhost:3000/api/signup", signup_info) | 38 | + fetch("/api/signup", signup_info) |
38 | .then(response => response.json()) | 39 | .then(response => response.json()) |
39 | .then(json => { | 40 | .then(json => { |
40 | if(json.message === 'success') { | 41 | if(json.message === 'success') { | ... | ... |
... | @@ -4,7 +4,7 @@ module.exports = function(app) { | ... | @@ -4,7 +4,7 @@ module.exports = function(app) { |
4 | app.use( | 4 | app.use( |
5 | '/api', | 5 | '/api', |
6 | createProxyMiddleware({ | 6 | createProxyMiddleware({ |
7 | - target: 'http://localhost:5000', | 7 | + target: 'http://localhost:5000/', |
8 | changeOrigin: true, | 8 | changeOrigin: true, |
9 | }) | 9 | }) |
10 | ); | 10 | ); | ... | ... |
... | @@ -15,7 +15,7 @@ | ... | @@ -15,7 +15,7 @@ |
15 | "author": "SeongHoon", | 15 | "author": "SeongHoon", |
16 | "license": "ISC", | 16 | "license": "ISC", |
17 | "dependencies": { | 17 | "dependencies": { |
18 | - "bcrypt": "^4.0.1", | 18 | + "bcrypt": "^4.0.1", |
19 | "body-parser": "^1.19.0", | 19 | "body-parser": "^1.19.0", |
20 | "concurrently": "^5.2.0", | 20 | "concurrently": "^5.2.0", |
21 | "express": "^4.17.1", | 21 | "express": "^4.17.1", |
... | @@ -24,4 +24,4 @@ | ... | @@ -24,4 +24,4 @@ |
24 | "jwt-decode": "^2.2.0", | 24 | "jwt-decode": "^2.2.0", |
25 | "mysql": "^2.18.1" | 25 | "mysql": "^2.18.1" |
26 | } | 26 | } |
27 | -} | 27 | +} |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -29,7 +29,25 @@ const connection = mysql.createConnection({ | ... | @@ -29,7 +29,25 @@ const connection = mysql.createConnection({ |
29 | database: conf.database, | 29 | database: conf.database, |
30 | }); | 30 | }); |
31 | 31 | ||
32 | -connection.connect(); | 32 | +function handleDisconnect() { |
33 | + connection.connect(function(err) { | ||
34 | + if(err) { | ||
35 | + console.log('error when connecting to connection:', err); | ||
36 | + setTimeout(handleDisconnect, 2000); | ||
37 | + } | ||
38 | + }); | ||
39 | + | ||
40 | + connection.on('error', function(err) { | ||
41 | + console.log('connection error', err); | ||
42 | + if(err.code === 'PROTOCOL_CONNECTION_LOST') { | ||
43 | + return handleDisconnect(); | ||
44 | + } else { | ||
45 | + throw err; | ||
46 | + } | ||
47 | + }); | ||
48 | +} | ||
49 | + | ||
50 | +handleDisconnect(); | ||
33 | 51 | ||
34 | app.use(bodyParser.json()); | 52 | app.use(bodyParser.json()); |
35 | app.use(bodyParser.urlencoded({ extended: true })); | 53 | app.use(bodyParser.urlencoded({ extended: true })); |
... | @@ -179,8 +197,21 @@ app.get("/api/mypicks", (req, res) => { | ... | @@ -179,8 +197,21 @@ app.get("/api/mypicks", (req, res) => { |
179 | let temp = iconv.decode(dataBuffer, "EUC-KR"); | 197 | let temp = iconv.decode(dataBuffer, "EUC-KR"); |
180 | 198 | ||
181 | connection.query(`SELECT pick FROM USER WHERE NAME='${username}';`, (err, rows, fileds) => { | 199 | connection.query(`SELECT pick FROM USER WHERE NAME='${username}';`, (err, rows, fileds) => { |
200 | + if(rows.length === 0) { | ||
201 | + return res.status(401).json({ | ||
202 | + code: 401, | ||
203 | + message: 'card 0' | ||
204 | + }); | ||
205 | + } | ||
206 | + if(rows[0].pick === null) { | ||
207 | + return res.status(401).json({ | ||
208 | + code: 401, | ||
209 | + message: 'card 0' | ||
210 | + }); | ||
211 | + } | ||
182 | 212 | ||
183 | let user_picks = rows[0].pick.split(','); | 213 | let user_picks = rows[0].pick.split(','); |
214 | + console.log(rows[0].pick); | ||
184 | temp = JSON.parse(temp); | 215 | temp = JSON.parse(temp); |
185 | user_picks.pop(); | 216 | user_picks.pop(); |
186 | for(let i=0; i<user_picks.length; i++) { | 217 | for(let i=0; i<user_picks.length; i++) { |
... | @@ -196,43 +227,55 @@ app.get("/api/mypicks", (req, res) => { | ... | @@ -196,43 +227,55 @@ app.get("/api/mypicks", (req, res) => { |
196 | 227 | ||
197 | app.post('/api/pick', (req, res) => { | 228 | app.post('/api/pick', (req, res) => { |
198 | 229 | ||
199 | - const user = jwt_decode(req.headers.authorization); | 230 | + const user = jwt_decode(req.headers.authorization); |
200 | - const username = user.name; | 231 | + const username = user.name; |
201 | - const cardid = req.body.cardid; | 232 | + const cardid = req.body.cardid; |
202 | 233 | ||
203 | - connection.query(`SELECT pick FROM USER WHERE NAME='${username}';`, (err, rows, fileds)=> { | 234 | + connection.query(`SELECT pick FROM USER WHERE NAME='${username}';`, (err, rows, fileds)=> { |
204 | - if(rows.length === 0) { | 235 | + if(rows.length === 0) { |
236 | + return res.status(401).json({ | ||
237 | + code: 401, | ||
238 | + message: 'card exist' | ||
239 | + }); | ||
240 | + } | ||
241 | + else { | ||
242 | + if(rows[0].pick === null || rows[0].pick === '') { | ||
243 | + const newPick = cardid.toString() + ','; | ||
244 | + connection.query(`UPDATE USER SET pick='${newPick}' WHERE NAME='${username}';`, (err, rows, fields) => { | ||
245 | + return res.status(200).json({ | ||
246 | + code: 200, | ||
247 | + message: 'insertion success', | ||
248 | + }); | ||
249 | + }) | ||
250 | + } | ||
251 | + else { | ||
252 | + var flag = true; | ||
253 | + let user_picks = rows[0].pick.split(','); | ||
254 | + user_picks.pop(); | ||
255 | + for(let i=0; i<user_picks.length; i++) { | ||
256 | + user_picks[i] = parseInt(user_picks[i]); | ||
257 | + if(user_picks[i] == cardid) { | ||
258 | + flag = false; | ||
259 | + } | ||
260 | + } | ||
261 | + if(flag) { | ||
262 | + const newPick = rows[0].pick + cardid.toString() + ','; | ||
263 | + connection.query(`UPDATE USER SET pick='${newPick}' WHERE NAME='${username}';`, (err, rows, fields) => { | ||
264 | + return res.status(200).json({ | ||
265 | + code: 200, | ||
266 | + message: 'insertion success', | ||
267 | + }); | ||
268 | + }) | ||
269 | + } | ||
270 | + else { | ||
205 | return res.status(401).json({ | 271 | return res.status(401).json({ |
206 | code: 401, | 272 | code: 401, |
207 | message: 'card exist' | 273 | message: 'card exist' |
208 | }); | 274 | }); |
209 | - } else { | ||
210 | - let flag = true; | ||
211 | - let user_picks = rows[0].pick.split(','); | ||
212 | - user_picks.pop(); | ||
213 | - for(let i=0; i<user_picks.length; i++) { | ||
214 | - user_picks[i] = parseInt(user_picks[i]); | ||
215 | - if(user_picks[i] == cardid) { | ||
216 | - flag = false; | ||
217 | - } | ||
218 | - } | ||
219 | - if(flag) { | ||
220 | - const newPick = rows[0].pick + cardid.toString() + ','; | ||
221 | - connection.query(`UPDATE USER SET pick='${newPick}' WHERE NAME='${username}';`, (err, rows, fields) => { | ||
222 | - return res.status(200).json({ | ||
223 | - code: 200, | ||
224 | - message: 'insertion success', | ||
225 | - }); | ||
226 | - }) | ||
227 | - } else { | ||
228 | - return res.status(401).json({ | ||
229 | - code: 401, | ||
230 | - message: 'card exist' | ||
231 | - }); | ||
232 | - } | ||
233 | - | ||
234 | } | 275 | } |
235 | - }) | 276 | + } |
277 | + } | ||
278 | + }) | ||
236 | }); | 279 | }); |
237 | 280 | ||
238 | app.post('/api/delete', (req, res) => { | 281 | app.post('/api/delete', (req, res) => { |
... | @@ -248,6 +291,12 @@ app.post('/api/delete', (req, res) => { | ... | @@ -248,6 +291,12 @@ app.post('/api/delete', (req, res) => { |
248 | }); | 291 | }); |
249 | } else { | 292 | } else { |
250 | let flag = false; | 293 | let flag = false; |
294 | + if(rows[0].pick === null) { | ||
295 | + return res.status(401).json({ | ||
296 | + code: 401, | ||
297 | + message: 'card 0' | ||
298 | + }); | ||
299 | + } | ||
251 | let user_picks = rows[0].pick.split(','); | 300 | let user_picks = rows[0].pick.split(','); |
252 | let newPick = ''; | 301 | let newPick = ''; |
253 | user_picks.pop(); | 302 | user_picks.pop(); | ... | ... |
-
Please register or login to post a comment