From c48ea233227e376983bad14cac0c76fd40bc5656 Mon Sep 17 00:00:00 2001 From: Seo Yeon Date: Mon, 25 Jan 2021 09:57:31 +0900 Subject: [PATCH] . --- client/.eslintcache | 2 +- client/src/Bookmark.js | 39 ++++--------- client/src/Components/Place.js | 7 --- client/src/Search.js | 13 +---- server/controllers/place.controller.js | 64 ++++++++++----------- server/controllers/review.controller.js | 74 +------------------------ server/routes/user.routes.js | 10 +--- 7 files changed, 51 insertions(+), 158 deletions(-) diff --git a/client/.eslintcache b/client/.eslintcache index 231f896..b70e9da 100644 --- a/client/.eslintcache +++ b/client/.eslintcache @@ -1 +1 @@ -[{"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\index.js":"1","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\reportWebVitals.js":"2","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\Place.js":"3","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\Login.js":"4","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\utils\\catchErrors.js":"5","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\Signup.js":"6","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\utils\\auth.js":"7","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\Paginations.js":"8","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Search.js":"9","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\App.js":"10","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\PrivateRoute.js":"11","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Bookmark.js":"12"},{"size":1267,"mtime":1611500254459,"results":"13","hashOfConfig":"14"},{"size":362,"mtime":499162500000,"results":"15","hashOfConfig":"14"},{"size":1928,"mtime":1611500202848,"results":"16","hashOfConfig":"14"},{"size":3147,"mtime":1611533394731,"results":"17","hashOfConfig":"14"},{"size":405,"mtime":1609915408569,"results":"18","hashOfConfig":"14"},{"size":2995,"mtime":1611489922054,"results":"19","hashOfConfig":"14"},{"size":726,"mtime":1611495738863,"results":"20","hashOfConfig":"14"},{"size":2199,"mtime":1610503781980,"results":"21","hashOfConfig":"14"},{"size":11190,"mtime":1611533394731,"results":"22","hashOfConfig":"14"},{"size":2167,"mtime":1611500202857,"results":"23","hashOfConfig":"14"},{"size":486,"mtime":1611489922054,"results":"24","hashOfConfig":"14"},{"size":2226,"mtime":1611489922053,"results":"25","hashOfConfig":"14"},{"filePath":"26","messages":"27","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"28","usedDeprecatedRules":"29"},"1t9w6go",{"filePath":"30","messages":"31","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"29"},{"filePath":"32","messages":"33","errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"34","usedDeprecatedRules":"35"},{"filePath":"36","messages":"37","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"29"},{"filePath":"38","messages":"39","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"29"},{"filePath":"40","messages":"41","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"29"},{"filePath":"42","messages":"43","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"29"},{"filePath":"44","messages":"45","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"29"},{"filePath":"46","messages":"47","errorCount":0,"warningCount":10,"fixableErrorCount":0,"fixableWarningCount":0,"source":"48","usedDeprecatedRules":"29"},{"filePath":"49","messages":"50","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"51","usedDeprecatedRules":"29"},{"filePath":"52","messages":"53","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"29"},{"filePath":"54","messages":"55","errorCount":0,"warningCount":14,"fixableErrorCount":0,"fixableWarningCount":0,"source":"56","usedDeprecatedRules":"29"},"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\index.js",["57"],"import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport 'bootstrap/dist/css/bootstrap.min.css';\r\nimport App from './App'\r\nimport Search from './Search';\r\nimport reportWebVitals from './reportWebVitals';\r\nimport Signup from './Components/Signup'\r\nimport Login from './Components/Login'\r\nimport PrivateRoute from \"./Components/PrivateRoute\";\r\nimport axios from 'axios'\r\nimport Bookmark from \"./Bookmark\"\r\nimport {\r\n BrowserRouter as Router,\r\n Switch,\r\n Route,\r\n Redirect,\r\n} from \"react-router-dom\";\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n",["58","59"],"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\reportWebVitals.js",[],"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\Place.js",["60","61","62","63","64","65"],"import axios from 'axios';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { Modal, Container, Row, Button, } from 'react-bootstrap';\r\n\r\nfunction Place(props) {\r\n<<<<<<< HEAD\r\n const [reviews, setReviews] = useState([]) \r\n const getReview = () => { //review를 서버에 연결해서\r\n axios.get(`/api/review/${props.search.name}`) \r\n=======\r\n const [reviews, setReviews] = useState([{ title: \"\", link: \"\", summery: \"\", content: \"\" }])\r\n const getReview = () => {\r\n axios.get(`/api/review/${props.search.name}`)\r\n>>>>>>> origin/BAE\r\n .then(res => {\r\n console.log(\"place res.data\", res.data)\r\n setReviews(res.data)\r\n })\r\n .catch(err => {\r\n console.log(err)\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n getReview();\r\n }, [])\r\n\r\n return (\r\n \r\n \r\n \r\n {props.index + 1}. {props.search.name}\r\n \r\n \r\n \r\n \r\n {reviews.map((review, index) => {\r\n return (\r\n \r\n {review.title}\r\n
{review.summary}
\r\n
{review.content}
\r\n
\r\n )\r\n })}\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default Place;\r\n",["66","67"],"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\Login.js",[],"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\utils\\catchErrors.js",[],"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\Signup.js",[],"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\utils\\auth.js",[],"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\Paginations.js",[],"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Search.js",["68","69","70","71","72","73","74","75","76","77"],"import React, { useState, useEffect } from 'react';\r\nimport { Link, Redirect } from 'react-router-dom';\r\nimport ohuh from './ohuh-sm.PNG';\r\nimport Place from './Components/Place';\r\nimport { Container, Form, Row, Col, Card, Image, InputGroup, FormControl, Button, Modal } from 'react-bootstrap';\r\nimport Paginations from './Components/Paginations.js'\r\nimport catchErrors from './utils/catchErrors.js'\r\nimport * as Icon from 'react-bootstrap-icons';\r\nimport axios from \"axios\";\r\n\r\nconst INIT_PAGE = {\r\n title: '',\r\n url: '',\r\n}\r\n\r\nfunction Search(props) {\r\n const endPage = 10;\r\n const [state, setState] = useState(false);\r\n const [index, setIndex] = useState(1);\r\n const [showSet, setShowSet] = useState([false, false, false, false]);\r\n const [search, setSearch] = useState(props.location.state.id);\r\n const [mobile, setMobile] = useState();\r\n const [show, setShow] = useState(false);\r\n const [page, setPage] = useState(INIT_PAGE)\r\n const [success, setSuccess] = useState(false)\r\n const [error, setError] = useState('')\r\n\r\n const handleClose = () => setShow(false);\r\n const handleShow = () => setShow(true);\r\n\r\n useEffect(() => {\r\n if (window.innerWidth < 960) {\r\n setMobile(true)\r\n } else {\r\n setMobile(false)\r\n }\r\n }, []);\r\n\r\n const places = [{\r\n name: \"한라산(hallasan)\",\r\n address: \"제주 서귀포시 토평동 산15-1\",\r\n img: \"data:image/png;base64,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\",\r\n // img: \"https://upload.wikimedia.org/wikipedia/commons/thumb/e/eb/KOCIS_Halla_Mountain_in_Jeju-do_%286387785543%29.jpg/269px-KOCIS_Halla_Mountain_in_Jeju-do_%286387785543%29.jpg?size=200x200\",\r\n // }, {\r\n // name: \"성산일출봉(sungsan)\",\r\n // address: \"제주 서귀포시 성산읍 성산리 1\",\r\n // img: \"https://www.jeju.go.kr/pub/site/geopark/images/sub/sub03/02%EC%A7%80%EC%A7%88%EB%A7%88%EC%9D%84%EC%9D%B4%EC%95%BC%EA%B8%B0/%EC%A7%80%EC%A7%88%EB%A7%88%EC%9D%84/%EC%A7%80%EC%A7%88%EB%A7%88%EC%9D%84_%EC%84%B1%EC%82%B0%EC%9D%BC%EC%B6%9C%EB%B4%89/1412402261.jpg?400/400\",\r\n // }, {\r\n // name: \"해녀의 집(haenyeo)\",\r\n // address: \"제주 서귀포시 성산읍 한도로 141-13지번오조리 3 오조해녀의집\",\r\n // img: \"https://mblogthumb-phinf.pstatic.net/MjAxNjExMTdfMTc0/MDAxNDc5MzU3ODU0ODQy.KZYXCjzsXT3rCsE4HXBfxyCg2buvluBvN_7NxVp7BSwg.loJc89d8JjGXdNCn-4yMd7aMWPjfrZn21TI9Hyzemkog.JPEG.icocam11/20161010_100205.jpg?type=w800\",\r\n // }, {\r\n // name: \"오설록 티 뮤지엄(osulloc)\",\r\n // address: \"제주 서귀포시 안덕면 신화역사로 15 오설록지번서광리 1235-1 오설록\",\r\n // img: \"https://cdnweb01.wikitree.co.kr/webdata/editor/202007/01/img_20200701143323_2ced7627.webp\",\r\n // }, {\r\n // name: \"오설록 티 뮤지엄(osulloc)\",\r\n // address: \"제주 서귀포시 안덕면 신화역사로 15 오설록지번서광리 1235-1 오설록\",\r\n // img: \"https://upload.wikimedia.org/wikipedia/commons/thumb/e/eb/KOCIS_Halla_Mountain_in_Jeju-do_%286387785543%29.jpg/269px-KOCIS_Halla_Mountain_in_Jeju-do_%286387785543%29.jpg\",\r\n }]\r\n\r\n if (state !== false) {\r\n return ;\r\n }\r\n\r\n const handlePage = (num) => {\r\n setIndex(num);\r\n }\r\n\r\n // async function bookmarkSave() {\r\n // await axios.put('/api/users', {userId:userId, bookmarkId:bookmarkId})\r\n // }\r\n\r\n const handleChange = (e) => {\r\n setSearch(e.target.value);\r\n }\r\n\r\n async function handleSubmit(e){\r\n setState(true); //버튼이 눌려서 handlesubmit이될때 setState값이 true로 바뀐다\r\n try { //respons 서버에 post로 요청하여 데이터를 받아온다\r\n const response = await axios.post('/api/users/bookmark', page)\r\n setSuccess(true)\r\n } catch (error) {\r\n console.log(error)\r\n catchErrors(error, setError)\r\n }\r\n }\r\n\r\n function paginate(items, pageNumber, itemNumber) {\r\n const page = []; //페이지를 빈배열로 설정\r\n const startIndex = (pageNumber - 1) * itemNumber // 처음인덱스 값이 페이지넘버 -1 * 아이템 넘버로 \r\n for (var i = 0; i < itemNumber; i++) { \r\n page.push(items[(startIndex + i)])\r\n } \r\n return page\r\n }\r\n\r\n const pagePlace = paginate(places, index, 1)\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n {pagePlace.map((place, index) => {\r\n return (\r\n \r\n \r\n \r\n {place.name}\r\n \r\n \r\n \r\n \r\n {place.address} \r\n \r\n setShowSet([false, false, false, false])} />\r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n { console.log(showSet)}\r\n {/* show가 전부 true로 바뀌어서 전부 다 보이게 되는 것이다. */}\r\n \r\n \r\n \r\n
\r\n\r\n );\r\n}\r\n\r\nexport default Search\r\n\r\n// async function saveId(bookmarkId) {\r\n// await axios.put('/api/users', {userId:userId, bookmarkId:bookmarkId})\r\n// }\r\n\r\n// const bookmarksave = async (req, res) => {\r\n// const {userId, bookmarkId} = req.body\r\n// let bookmark = await Bookmark.findOne({bookmarkId:bookmarkId}).select('user')\r\n// }\r\n","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\App.js",["78","79","80","81"],"import React, { useEffect, useState } from 'react';\r\nimport { Link, Redirect } from 'react-router-dom';\r\nimport ohuh from './ohuh.PNG'\r\nimport { Container, Row, Form, Image, InputGroup, Button, Col, FormControl, Navbar, Nav } from 'react-bootstrap';\r\nimport { handleLogout, isAuthenticated } from './utils/auth.js'\r\n\r\nfunction App() {\r\n const [state, setState] = useState(false);\r\n const [search, setSearch] = useState(\"\");\r\n const user = isAuthenticated()\r\n\r\n if (state !== false) {\r\n return ;\r\n }\r\n\r\n const handleChange = (e) => {\r\n setSearch(e.target.value);\r\n } //바뀌는 것이 있을때 이벤트 발생\r\n\r\n const handleSubmit = () => {\r\n setState(true);\r\n } //submit 버튼을 누르면 state 값을 true로 바뀐다\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default App;\r\n","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\PrivateRoute.js",[],"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Bookmark.js",["82","83","84","85","86","87","88","89","90","91","92","93","94","95"],"import React, { useState, useEffect } from 'react'\r\nimport { Alert, Col, Card, Container, Form, Row, Button, Nav, Navbar, ListGroup, Image, Table } from \"react-bootstrap\"\r\nimport axios from \"axios\"\r\nimport catchErrors from './utils/catchErrors.js'\r\nimport { Redirect } from 'react-router-dom'\r\n\r\nconst INIT_PAGE = {\r\n title: '',\r\n url: '',\r\n}\r\n\r\nfunction Bookmark() {\r\n const [page, setPage] = useState(INIT_PAGE)\r\n const [success, setSuccess] = useState(false)\r\n const [error, setError] = useState('')\r\n\r\n\r\n function handleChange(event) {\r\n const {title, value} = event.target\r\n setPage({...page, [title]: value})\r\n }\r\n\r\n async function handleSubmit(event) {\r\n event.preventDefault()\r\n try {\r\n setError('')\r\n const response = await axios.post('/api/users/bookmark ', page)\r\n console.log(response.data)\r\n console.log(page)\r\n // setUser(INIT_USER)\r\n setSuccess(true)\r\n } catch (error) {\r\n console.log(error)\r\n catchErrors(error, setError)\r\n }\r\n }\r\n\r\n const add_Page = [{\r\n title:'즐겨찾기1',\r\n url:'http://localhost:3000',\r\n }, {\r\n title:'즐겨찾기2',\r\n url:'https://www.naver.com/',\r\n }, {\r\n title:'즐겨찾기3',\r\n url:'https://www.youtube.com/watch?v=wo46N-LQK7o'\r\n }]\r\n\r\n return (\r\n \r\n \r\n 북마크\r\n \r\n {/*
\r\n \r\n \r\n */}\r\n
\r\n
\r\n \r\n 북마크1\r\n 북마크2\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default Bookmark",{"ruleId":"96","severity":1,"message":"97","line":11,"column":8,"nodeType":"98","messageId":"99","endLine":11,"endColumn":13},{"ruleId":"100","replacedBy":"101"},{"ruleId":"102","replacedBy":"103"},{"ruleId":"96","severity":1,"message":"104","line":3,"column":33,"nodeType":"98","messageId":"99","endLine":3,"endColumn":36},{"ruleId":"96","severity":1,"message":"105","line":3,"column":46,"nodeType":"98","messageId":"99","endLine":3,"endColumn":51},{"ruleId":"96","severity":1,"message":"106","line":3,"column":53,"nodeType":"98","messageId":"99","endLine":3,"endColumn":57},{"ruleId":"96","severity":1,"message":"107","line":3,"column":59,"nodeType":"98","messageId":"99","endLine":3,"endColumn":68},{"ruleId":"96","severity":1,"message":"108","line":3,"column":70,"nodeType":"98","messageId":"99","endLine":3,"endColumn":78},{"ruleId":"109","severity":1,"message":"110","line":20,"column":6,"nodeType":"111","endLine":20,"endColumn":8,"suggestions":"112"},{"ruleId":"100","replacedBy":"113"},{"ruleId":"102","replacedBy":"114"},{"ruleId":"96","severity":1,"message":"115","line":5,"column":83,"nodeType":"98","messageId":"99","endLine":5,"endColumn":88},{"ruleId":"96","severity":1,"message":"116","line":22,"column":12,"nodeType":"98","messageId":"99","endLine":22,"endColumn":18},{"ruleId":"96","severity":1,"message":"117","line":23,"column":12,"nodeType":"98","messageId":"99","endLine":23,"endColumn":16},{"ruleId":"96","severity":1,"message":"118","line":24,"column":18,"nodeType":"98","messageId":"99","endLine":24,"endColumn":25},{"ruleId":"96","severity":1,"message":"119","line":25,"column":12,"nodeType":"98","messageId":"99","endLine":25,"endColumn":19},{"ruleId":"96","severity":1,"message":"120","line":26,"column":12,"nodeType":"98","messageId":"99","endLine":26,"endColumn":17},{"ruleId":"96","severity":1,"message":"121","line":28,"column":11,"nodeType":"98","messageId":"99","endLine":28,"endColumn":22},{"ruleId":"96","severity":1,"message":"122","line":29,"column":11,"nodeType":"98","messageId":"99","endLine":29,"endColumn":21},{"ruleId":"96","severity":1,"message":"123","line":84,"column":19,"nodeType":"98","messageId":"99","endLine":84,"endColumn":27},{"ruleId":"124","severity":1,"message":"125","line":106,"column":35,"nodeType":"126","endLine":106,"endColumn":76},{"ruleId":"96","severity":1,"message":"127","line":1,"column":17,"nodeType":"98","messageId":"99","endLine":1,"endColumn":26},{"ruleId":"96","severity":1,"message":"128","line":2,"column":10,"nodeType":"98","messageId":"99","endLine":2,"endColumn":14},{"ruleId":"96","severity":1,"message":"129","line":4,"column":64,"nodeType":"98","messageId":"99","endLine":4,"endColumn":75},{"ruleId":"96","severity":1,"message":"130","line":4,"column":77,"nodeType":"98","messageId":"99","endLine":4,"endColumn":83},{"ruleId":"96","severity":1,"message":"127","line":1,"column":27,"nodeType":"98","messageId":"99","endLine":1,"endColumn":36},{"ruleId":"96","severity":1,"message":"131","line":2,"column":10,"nodeType":"98","messageId":"99","endLine":2,"endColumn":15},{"ruleId":"96","severity":1,"message":"104","line":2,"column":17,"nodeType":"98","messageId":"99","endLine":2,"endColumn":20},{"ruleId":"96","severity":1,"message":"106","line":2,"column":22,"nodeType":"98","messageId":"99","endLine":2,"endColumn":26},{"ruleId":"96","severity":1,"message":"132","line":2,"column":45,"nodeType":"98","messageId":"99","endLine":2,"endColumn":48},{"ruleId":"96","severity":1,"message":"133","line":2,"column":50,"nodeType":"98","messageId":"99","endLine":2,"endColumn":56},{"ruleId":"96","severity":1,"message":"134","line":2,"column":82,"nodeType":"98","messageId":"99","endLine":2,"endColumn":87},{"ruleId":"96","severity":1,"message":"135","line":2,"column":89,"nodeType":"98","messageId":"99","endLine":2,"endColumn":94},{"ruleId":"96","severity":1,"message":"136","line":5,"column":10,"nodeType":"98","messageId":"99","endLine":5,"endColumn":18},{"ruleId":"96","severity":1,"message":"119","line":14,"column":12,"nodeType":"98","messageId":"99","endLine":14,"endColumn":19},{"ruleId":"96","severity":1,"message":"120","line":15,"column":12,"nodeType":"98","messageId":"99","endLine":15,"endColumn":17},{"ruleId":"96","severity":1,"message":"137","line":18,"column":14,"nodeType":"98","messageId":"99","endLine":18,"endColumn":26},{"ruleId":"96","severity":1,"message":"138","line":23,"column":20,"nodeType":"98","messageId":"99","endLine":23,"endColumn":32},{"ruleId":"96","severity":1,"message":"139","line":38,"column":11,"nodeType":"98","messageId":"99","endLine":38,"endColumn":19},"no-unused-vars","'axios' is defined but never used.","Identifier","unusedVar","no-native-reassign",["140"],"no-negated-in-lhs",["141"],"'Col' is defined but never used.","'Badge' is defined but never used.","'Card' is defined but never used.","'Accordion' is defined but never used.","'Carousel' is defined but never used.","react-hooks/exhaustive-deps","React Hook useEffect has a missing dependency: 'getReview'. Either include it or remove the dependency array.","ArrayExpression",["142"],["140"],["141"],"'Modal' is defined but never used.","'mobile' is assigned a value but never used.","'show' is assigned a value but never used.","'setPage' is assigned a value but never used.","'success' is assigned a value but never used.","'error' is assigned a value but never used.","'handleClose' is assigned a value but never used.","'handleShow' is assigned a value but never used.","'response' is assigned a value but never used.","react/jsx-no-duplicate-props","No duplicate props allowed","JSXAttribute","'useEffect' is defined but never used.","'Link' is defined but never used.","'FormControl' is defined but never used.","'Navbar' is defined but never used.","'Alert' is defined but never used.","'Row' is defined but never used.","'Button' is defined but never used.","'Image' is defined but never used.","'Table' is defined but never used.","'Redirect' is defined but never used.","'handleChange' is defined but never used.","'handleSubmit' is defined but never used.","'add_Page' is assigned a value but never used.","no-global-assign","no-unsafe-negation",{"desc":"143","fix":"144"},"Update the dependencies array to be: [getReview]",{"range":"145","text":"146"},[581,583],"[getReview]"] \ No newline at end of file +[{"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\index.js":"1","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\reportWebVitals.js":"2","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\Place.js":"3","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\Login.js":"4","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\utils\\catchErrors.js":"5","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\Signup.js":"6","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\utils\\auth.js":"7","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\Paginations.js":"8","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Search.js":"9","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\App.js":"10","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\PrivateRoute.js":"11","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Bookmark.js":"12"},{"size":1267,"mtime":1611500254459,"results":"13","hashOfConfig":"14"},{"size":362,"mtime":499162500000,"results":"15","hashOfConfig":"14"},{"size":1650,"mtime":1611534274491,"results":"16","hashOfConfig":"14"},{"size":3147,"mtime":1611533394731,"results":"17","hashOfConfig":"14"},{"size":405,"mtime":1609915408569,"results":"18","hashOfConfig":"14"},{"size":2995,"mtime":1611489922054,"results":"19","hashOfConfig":"14"},{"size":726,"mtime":1611495738863,"results":"20","hashOfConfig":"14"},{"size":2199,"mtime":1610503781980,"results":"21","hashOfConfig":"14"},{"size":10888,"mtime":1611535956580,"results":"22","hashOfConfig":"14"},{"size":2167,"mtime":1611500202857,"results":"23","hashOfConfig":"14"},{"size":486,"mtime":1611489922054,"results":"24","hashOfConfig":"14"},{"size":1626,"mtime":1611536074488,"results":"25","hashOfConfig":"14"},{"filePath":"26","messages":"27","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"28","usedDeprecatedRules":"29"},"1t9w6go",{"filePath":"30","messages":"31","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"29"},{"filePath":"32","messages":"33","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"34","usedDeprecatedRules":"29"},{"filePath":"35","messages":"36","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"29"},{"filePath":"37","messages":"38","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"29"},{"filePath":"39","messages":"40","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"29"},{"filePath":"41","messages":"42","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"29"},{"filePath":"43","messages":"44","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"29"},{"filePath":"45","messages":"46","errorCount":0,"warningCount":10,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"47","messages":"48","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"49","usedDeprecatedRules":"29"},{"filePath":"50","messages":"51","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"29"},{"filePath":"52","messages":"53","errorCount":0,"warningCount":13,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\index.js",["54"],"import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport 'bootstrap/dist/css/bootstrap.min.css';\r\nimport App from './App'\r\nimport Search from './Search';\r\nimport reportWebVitals from './reportWebVitals';\r\nimport Signup from './Components/Signup'\r\nimport Login from './Components/Login'\r\nimport PrivateRoute from \"./Components/PrivateRoute\";\r\nimport axios from 'axios'\r\nimport Bookmark from \"./Bookmark\"\r\nimport {\r\n BrowserRouter as Router,\r\n Switch,\r\n Route,\r\n Redirect,\r\n} from \"react-router-dom\";\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n",["55","56"],"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\reportWebVitals.js",[],"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\Place.js",["57","58"],"import axios from 'axios';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { Modal, Container, Row, Button, } from 'react-bootstrap';\r\n\r\nfunction Place(props) {\r\n const [reviews, setReviews] = useState()\r\n const [db, setDb] = useState(false)\r\n const getReview = () => {\r\n axios({ url: `/api/review?keyword=${props.place.name}`, method: 'post', data: { db: db } })\r\n .then(res => {\r\n console.log(\"place res.data\", res.data)\r\n setReviews(res.data)\r\n })\r\n .catch(err => {\r\n console.log(err)\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n getReview();\r\n }, [])\r\n\r\n return (\r\n \r\n \r\n \r\n {props.index + 1}. {props.place.name}\r\n \r\n \r\n \r\n \r\n {Array.isArray(reviews) ? reviews.map((review, index) => {\r\n return (\r\n \r\n {review.title}\r\n
{review.summary}
\r\n
{review.content}
\r\n
\r\n )\r\n })\r\n : \"리뷰가 없습니다.\"}\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default Place;\r\n","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\Login.js",[],"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\utils\\catchErrors.js",[],"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\Signup.js",[],"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\utils\\auth.js",[],"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\Paginations.js",[],"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Search.js",["59","60","61","62","63","64","65","66","67","68"],"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\App.js",["69","70","71","72"],"import React, { useEffect, useState } from 'react';\r\nimport { Link, Redirect } from 'react-router-dom';\r\nimport ohuh from './ohuh.PNG'\r\nimport { Container, Row, Form, Image, InputGroup, Button, Col, FormControl, Navbar, Nav } from 'react-bootstrap';\r\nimport { handleLogout, isAuthenticated } from './utils/auth.js'\r\n\r\nfunction App() {\r\n const [state, setState] = useState(false);\r\n const [search, setSearch] = useState(\"\");\r\n const user = isAuthenticated()\r\n\r\n if (state !== false) {\r\n return ;\r\n }\r\n\r\n const handleChange = (e) => {\r\n setSearch(e.target.value);\r\n } //바뀌는 것이 있을때 이벤트 발생\r\n\r\n const handleSubmit = () => {\r\n setState(true);\r\n } //submit 버튼을 누르면 state 값을 true로 바뀐다\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default App;\r\n","C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Components\\PrivateRoute.js",[],"C:\\Users\\hello\\Desktop\\project\\search-page\\client\\src\\Bookmark.js",["73","74","75","76","77","78","79","80","81","82","83","84","85"],{"ruleId":"86","severity":1,"message":"87","line":11,"column":8,"nodeType":"88","messageId":"89","endLine":11,"endColumn":13},{"ruleId":"90","replacedBy":"91"},{"ruleId":"92","replacedBy":"93"},{"ruleId":"86","severity":1,"message":"94","line":7,"column":14,"nodeType":"88","messageId":"89","endLine":7,"endColumn":19},{"ruleId":"95","severity":1,"message":"96","line":21,"column":6,"nodeType":"97","endLine":21,"endColumn":8,"suggestions":"98"},{"ruleId":"86","severity":1,"message":"99","line":5,"column":83,"nodeType":"88","messageId":"89","endLine":5,"endColumn":88},{"ruleId":"86","severity":1,"message":"100","line":22,"column":12,"nodeType":"88","messageId":"89","endLine":22,"endColumn":18},{"ruleId":"86","severity":1,"message":"101","line":23,"column":12,"nodeType":"88","messageId":"89","endLine":23,"endColumn":16},{"ruleId":"86","severity":1,"message":"102","line":24,"column":18,"nodeType":"88","messageId":"89","endLine":24,"endColumn":25},{"ruleId":"86","severity":1,"message":"103","line":25,"column":12,"nodeType":"88","messageId":"89","endLine":25,"endColumn":19},{"ruleId":"86","severity":1,"message":"104","line":26,"column":12,"nodeType":"88","messageId":"89","endLine":26,"endColumn":17},{"ruleId":"86","severity":1,"message":"105","line":28,"column":11,"nodeType":"88","messageId":"89","endLine":28,"endColumn":22},{"ruleId":"86","severity":1,"message":"106","line":29,"column":11,"nodeType":"88","messageId":"89","endLine":29,"endColumn":21},{"ruleId":"86","severity":1,"message":"107","line":84,"column":19,"nodeType":"88","messageId":"89","endLine":84,"endColumn":27},{"ruleId":"108","severity":1,"message":"109","line":106,"column":35,"nodeType":"110","endLine":106,"endColumn":76},{"ruleId":"86","severity":1,"message":"111","line":1,"column":17,"nodeType":"88","messageId":"89","endLine":1,"endColumn":26},{"ruleId":"86","severity":1,"message":"112","line":2,"column":10,"nodeType":"88","messageId":"89","endLine":2,"endColumn":14},{"ruleId":"86","severity":1,"message":"113","line":4,"column":64,"nodeType":"88","messageId":"89","endLine":4,"endColumn":75},{"ruleId":"86","severity":1,"message":"114","line":4,"column":77,"nodeType":"88","messageId":"89","endLine":4,"endColumn":83},{"ruleId":"86","severity":1,"message":"115","line":2,"column":10,"nodeType":"88","messageId":"89","endLine":2,"endColumn":15},{"ruleId":"86","severity":1,"message":"116","line":2,"column":17,"nodeType":"88","messageId":"89","endLine":2,"endColumn":20},{"ruleId":"86","severity":1,"message":"117","line":2,"column":22,"nodeType":"88","messageId":"89","endLine":2,"endColumn":26},{"ruleId":"86","severity":1,"message":"118","line":2,"column":45,"nodeType":"88","messageId":"89","endLine":2,"endColumn":48},{"ruleId":"86","severity":1,"message":"119","line":2,"column":50,"nodeType":"88","messageId":"89","endLine":2,"endColumn":56},{"ruleId":"86","severity":1,"message":"120","line":2,"column":82,"nodeType":"88","messageId":"89","endLine":2,"endColumn":87},{"ruleId":"86","severity":1,"message":"121","line":2,"column":89,"nodeType":"88","messageId":"89","endLine":2,"endColumn":94},{"ruleId":"86","severity":1,"message":"122","line":6,"column":10,"nodeType":"88","messageId":"89","endLine":6,"endColumn":18},{"ruleId":"86","severity":1,"message":"102","line":16,"column":18,"nodeType":"88","messageId":"89","endLine":16,"endColumn":25},{"ruleId":"86","severity":1,"message":"104","line":17,"column":12,"nodeType":"88","messageId":"89","endLine":17,"endColumn":17},{"ruleId":"86","severity":1,"message":"123","line":19,"column":20,"nodeType":"88","messageId":"89","endLine":19,"endColumn":32},{"ruleId":"86","severity":1,"message":"107","line":23,"column":19,"nodeType":"88","messageId":"89","endLine":23,"endColumn":27},{"ruleId":"95","severity":1,"message":"124","line":34,"column":8,"nodeType":"97","endLine":34,"endColumn":14,"suggestions":"125"},"no-unused-vars","'axios' is defined but never used.","Identifier","unusedVar","no-native-reassign",["126"],"no-negated-in-lhs",["127"],"'setDb' is assigned a value but never used.","react-hooks/exhaustive-deps","React Hook useEffect has a missing dependency: 'getReview'. Either include it or remove the dependency array.","ArrayExpression",["128"],"'Modal' is defined but never used.","'mobile' is assigned a value but never used.","'show' is assigned a value but never used.","'setPage' is assigned a value but never used.","'success' is assigned a value but never used.","'error' is assigned a value but never used.","'handleClose' is assigned a value but never used.","'handleShow' is assigned a value but never used.","'response' is assigned a value but never used.","react/jsx-no-duplicate-props","No duplicate props allowed","JSXAttribute","'useEffect' is defined but never used.","'Link' is defined but never used.","'FormControl' is defined but never used.","'Navbar' is defined but never used.","'Alert' is defined but never used.","'Col' is defined but never used.","'Card' is defined but never used.","'Row' is defined but never used.","'Button' is defined but never used.","'Image' is defined but never used.","'Table' is defined but never used.","'Redirect' is defined but never used.","'handleSubmit' is defined but never used.","React Hook useEffect has an unnecessary dependency: 'user'. Either exclude it or remove the dependency array. Outer scope values like 'user' aren't valid dependencies because mutating them doesn't re-render the component.",["129"],"no-global-assign","no-unsafe-negation",{"desc":"130","fix":"131"},{"desc":"132","fix":"133"},"Update the dependencies array to be: [getReview]",{"range":"134","text":"135"},"Update the dependencies array to be: []",{"range":"136","text":"137"},[605,607],"[getReview]",[989,995],"[]"] \ No newline at end of file diff --git a/client/src/Bookmark.js b/client/src/Bookmark.js index c9bd9df..28d4e19 100644 --- a/client/src/Bookmark.js +++ b/client/src/Bookmark.js @@ -2,49 +2,38 @@ import React, { useState, useEffect } from 'react' import { Alert, Col, Card, Container, Form, Row, Button, Nav, Navbar, ListGroup, Image, Table } from "react-bootstrap" import axios from "axios" import catchErrors from './utils/catchErrors.js' +import { isAuthenticated } from './utils/auth' import { Redirect } from 'react-router-dom' const INIT_PAGE = { - title: '', - url: '', + name: '', + bookmark: [] } +const user = isAuthenticated() + function Bookmark() { const [page, setPage] = useState(INIT_PAGE) - const [success, setSuccess] = useState(false) const [error, setError] = useState('') - - function handleChange(event) { - const {title, value} = event.target - setPage({...page, [title]: value}) - } - async function handleSubmit(event) { event.preventDefault() try { setError('') - const response = await axios.post('/api/users/bookmark ', page) - console.log(response.data) + const response = await axios.post('/api/users/bookmark',page) console.log(page) // setUser(INIT_USER) - setSuccess(true) } catch (error) { console.log(error) catchErrors(error, setError) - } + } } - const add_Page = [{ - title:'즐겨찾기1', - url:'http://localhost:3000', - }, { - title:'즐겨찾기2', - url:'https://www.naver.com/', - }, { - title:'즐겨찾기3', - url:'https://www.youtube.com/watch?v=wo46N-LQK7o' - }] + useEffect(() => { + Bookmark(user) + }, [user]) + + return ( @@ -53,10 +42,6 @@ function Bookmark() { - {/*
- - - */}
diff --git a/client/src/Components/Place.js b/client/src/Components/Place.js index 3a1ade4..f5c5b10 100644 --- a/client/src/Components/Place.js +++ b/client/src/Components/Place.js @@ -3,18 +3,11 @@ import React, { useEffect, useState } from 'react'; import { Modal, Container, Row, Button, } from 'react-bootstrap'; function Place(props) { -<<<<<<< HEAD - const [reviews, setReviews] = useState([{ title: "", link: "", summery: "", content: "" }]) - const getReview = () => { - axios.get(`/api/review/${props.search.name}`)//review를 서버에 연결해서 - .then(res => {s -======= const [reviews, setReviews] = useState() const [db, setDb] = useState(false) const getReview = () => { axios({ url: `/api/review?keyword=${props.place.name}`, method: 'post', data: { db: db } }) .then(res => { ->>>>>>> origin/cherry console.log("place res.data", res.data) setReviews(res.data) }) diff --git a/client/src/Search.js b/client/src/Search.js index 628884d..df66afa 100644 --- a/client/src/Search.js +++ b/client/src/Search.js @@ -5,7 +5,7 @@ import Place from './Components/Place'; import { Container, Form, Row, Col, Card, Image, InputGroup, FormControl, Button, Modal } from 'react-bootstrap'; import Paginations from './Components/Paginations.js' import catchErrors from './utils/catchErrors.js' -import * as Icon from 'react-bootstrap-icons'; +// import * as Icon from 'react-bootstrap-icons'; import axios from "axios"; const INIT_PAGE = { @@ -124,7 +124,7 @@ function Search(props) { return ( - + {/* */} {place.name} @@ -154,12 +154,3 @@ function Search(props) { } export default Search - -// async function saveId(bookmarkId) { -// await axios.put('/api/users', {userId:userId, bookmarkId:bookmarkId}) -// } - -// const bookmarksave = async (req, res) => { -// const {userId, bookmarkId} = req.body -// let bookmark = await Bookmark.findOne({bookmarkId:bookmarkId}).select('user') -// } diff --git a/server/controllers/place.controller.js b/server/controllers/place.controller.js index 5c73b2a..f4d2093 100644 --- a/server/controllers/place.controller.js +++ b/server/controllers/place.controller.js @@ -26,7 +26,7 @@ const searchPlace = async (req, res) => { places[i] = { name: $1('.biz_name').text(), category: $1('.category').text(), address: $1('.addr').text() } }) - } + }) } const searchImg = async (req, res) => { @@ -38,24 +38,24 @@ const searchImg = async (req, res) => { let name = req.query.keyword let $1 = cheerio.load(html); - axios.get(imgUrl) - .then(async (response) => { - const html = response.data - let name = req.params.search - let $1 = cheerio.load(html); + axios.get(imgUrl) + .then(async (response) => { + const html = response.data + let name = req.params.search + let $1 = cheerio.load(html); - let images = $1('.RAyV4b').find('img').attr('src') + let images = $1('.RAyV4b').find('img').attr('src') - //사진만 업데이트 - let Place = await Places.findOne({ name: req.params.search }) - Place.times.push(new Date().toLocaleString()) - await Places.updateOne({ name: req.params.search }, { img: images, times: Place.times }) + //사진만 업데이트 + let Place = await Places.findOne({ name: req.params.search }) + Place.times.push(new Date().toLocaleString()) + await Places.updateOne({ name: req.params.search }, { img: images, times: Place.times }) - const newPlaces = await new Places( - ).save() + const newPlaces = await new Places( + ).save() - res.send(images) - }) + res.send(images) + }) //사진만 업데이트 let Place = await Places.findOne({ name: req.query.keyword }) @@ -64,28 +64,28 @@ const searchImg = async (req, res) => { -} + }) const searchAssociation = async (req, res) => { - let Place = await Places.findOne({ name: req.query.keyword }) + let Place = await Places.findOne({ name: req.query.keyword }) - if (!Place) { - res.send([]) - } - let addresse = Place.address.split(' ')[0] + if (!Place) { + res.send([]) + } + let addresse = Place.address.split(' ')[0] - // let AssociationsId = [] + // let AssociationsId = [] - let addressPlaces = new RegExp(`${addresse}`) - let responsePlaces = await Places.find({ address: addressPlaces }) - res.send(responsePlaces) + let addressPlaces = new RegExp(`${addresse}`) + let responsePlaces = await Places.find({ address: addressPlaces }) + res.send(responsePlaces) - // responsePlaces.map(Association => { - // AssociationsId.push(Association._id) - // }) - // console.log("Associations = ", Associations) - // res.send(AssociationsId) -} + // responsePlaces.map(Association => { + // AssociationsId.push(Association._id) + // }) + // console.log("Associations = ", Associations) + // res.send(AssociationsId) + } -export default { searchImg, searchPlace, searchAssociation } + export default { searchImg, searchPlace, searchAssociation } diff --git a/server/controllers/review.controller.js b/server/controllers/review.controller.js index 2fd1893..250ff72 100644 --- a/server/controllers/review.controller.js +++ b/server/controllers/review.controller.js @@ -1,6 +1,5 @@ import Review from '../models/Review.js' import cheerio from "cheerio"; -<<<<<<< HEAD import fs from 'fs' import axios from 'axios'; @@ -16,14 +15,14 @@ const search = async (req, res, next) => { fs.writeFileSync("googleSearch", response1.data, { encoding: 'utf-8' }) // console.log(response1.data) - const $1 = cheerio.load(response1.data); + const $1 = cheerio.load(response1.data); //cheerio? reponse1의 데이터를 로드하는거 $1('.kCrYT').each(async function (i) { - const title = $1(this).find('h3').text() + const title = $1(this).find('h3').text() //타이틀에 텍스트 안에 h3값을 찾는다? const searchParams = new URLSearchParams($1(this).find('a').attr('href')); const link = searchParams.get("/url?q") const summary = $1(this).find('.s3v9rd').find('.s3v9rd').text() content.push(getReview(link)) - if (title) { + if (title) { //타이틀일때 리뷰에 [i] 를 넣었을 때 타이틀, 링크값 설정 reviews[i] = { title: title, link: link } } else if (summary) { reviews[i - 1] = { ...reviews[i - 1], summary: summary } @@ -38,55 +37,6 @@ const search = async (req, res, next) => { } catch (error) { // console.log(error) // res.send(error) -======= -import axios from 'axios'; - -const search = async (req, res, next) => { - console.log("1") - for (let i = 1; (req.reviews).length > 10; i++) { - try { - console.log("2") - let reviews = [] - let content = [] - const url = "https://www.google.com/search?q=" + encodeURI(req.query.keyword) + "+site%3Atistory.com&page_no=" + i - const response1 = await axios.get(url) - // console.log(response1.data) - const $1 = cheerio.load(response1.data); - $1('.kCrYT').each(async function (i) { - console.log("3") - const title = $1(this).find('h3').text() - const searchParams = new URLSearchParams($1(this).find('a').attr('href')); - const link = searchParams.get("/url?q") - const summary = $1(this).find('.s3v9rd').find('.s3v9rd').text() - Review.find({ link: link }, function (err, review) { - if (!review) { - content.push(getReview(link)) - if (title) { - reviews[i] = { title: title, link: link } - } else if (summary) { - reviews[i - 1] = { ...reviews[i - 1], summary: summary } - reviews = reviews.filter(e => e) - } - } - }) - }) - let promiseReview = await Promise.all(content) - promiseReview = promiseReview.filter(e => typeof (e) === 'string') - reviews.forEach(async (review, i) => { - console.log("4") - review["content"] = promiseReview[i] - const reviews = new Review(review).save() - reviews.keyword.push(req.query.keyword) - req.reviews.push(reviews) - }) - console.log("5") - res.send(reviews) - } catch (error) { - console.log("6") - console.log(error) - res.send(error) - } ->>>>>>> origin/cherry } } @@ -122,23 +72,5 @@ const getReview = async (link) => { return content } -<<<<<<< HEAD export default { search, getReview } -======= -const find = (req, res, next) => { - console.log("7", req.body) - if (req.body.db) { - next() - } - Review.find({ keyword:{ $elemMatch: res.query.keyword } }, function (err, reviews) { - if (reviews) { - if (reviews.length > 10) - res.send(reviews, { db: true }) - req.reviews = reviews - } - next() - }) -} -export default { search, find } ->>>>>>> origin/cherry diff --git a/server/routes/user.routes.js b/server/routes/user.routes.js index c446326..8692be0 100644 --- a/server/routes/user.routes.js +++ b/server/routes/user.routes.js @@ -8,14 +8,6 @@ router.route('/api/users/signup') router.param('userId', userCtrl.userById) -// router.get('/admin/:_id', verifyToken, function (req, res, next) { -// console.log('/reserves/admin get req.params', req.params) -// Reserve.find({ approve: false }).populate('user').exec(function (err, reserve) { -// if (err) return res.status(500).json({ error: err }); -// console.log('reserve list', reserve) -// res.status(201).json(reserve); -// }) -// }); - +// router.route('/api/users/bookmark') export default router \ No newline at end of file -- GitLab