본문 바로가기
  • 삽질하는 자의 블로그
[배포 오류] 내 최악의 오류 40시간을 날려버린 [배포 오류]Error: Error connecting to db: connect ECONNREFUSED 127.0.0.1:27017 0. 들어가기에 앞서 사용한 DB : MongoDB 사용한 DB Hosting : Atlas MongoDB 사용한 Hosting Provider : HEROKU 사용한 API : Stripe API (결제용) 오류의 원인코드 : connect-mongodb-session 패키지 1. 오류처리 실패원인 [몰랐던 사실] 오류코드는 아래부터 위로 읽는것이다. 헤로쿠는 그저 박스일뿐, 실행은 헤로쿠 안의 '코드'가 하는것이다. 127.0.0.1 은 LoopBack IP이다. IP주소가 아니다. 환경변수는 헤로쿠 안의 코드가 실행될때, 헤로쿠가 변수 안으로 넣어주는 용도로 쓰이는 변수이다. 기본적으로 PORT는 넣어주지만, 나머지 환경변수는 직접지정해야 넣어진다. MONGODB ATLAS는 그저 새로운 DB일 뿐.. 2022. 10. 11.
STRIPE API, 왜! 대체 왜! redirect가 이상한 곳으로 먹히나? [고치긴 했는데 답 없음 주의] 어제 stripe api 를 사용하다가, 한시간을 날려보았다. 왜? URL 주소로 접속을 했고, 라우트도 올바르게 설정했고, 컨트롤러도 잘 설정했는데? 결제 성공을 하면 나와야 하는 페이지가 나오지 않고 그~냥 딴페이지가 나와버린다!!!!!! 이렇게 연결해두면? 성공페이지 대신에 뭔 이상한, CLIENT ORDER 페이지가 나온다. 내가 만들어놓은 ORDER PAGE가!! 나는 그것을 RENDER한적 없다고 이놈아... 정말로 한참을 고민하고, 한참을 찾다가, 잠깐 머리를 비우고, 그냥 URL을 바꾸어보았다. 잘된다. 왜? 모른다. 일단 해결됐다. 하... 왜... 2022. 10. 6.
[Failed to load resource: the server responded with a status of 400 (Bad Request)] ajax request 400error! 총체적 난국이었다. 무엇보다 너무나 많은 조건으로 인해 400 error가 나와서, 정말로 답이 없었다. ajax 요청에 400error는 1. 대부분 [URL 주소의 오류로 많이 발생한다.] 2. 나머지는 [DATA를 안보냈거나, 잘못보냈거나] 너무 급하게 코딩을 한 것도 화근이었고, 갑자기 신기하게 팽팽 돌아가는 머리가 이상했었다.. 으윽 우선 코드를 보자면 1. VIEW 2. JAVASCRIPT , ROUTE 3. CONTROLLER 결과는? Failed to load resource: the server responded with a status of 400 (Bad Request) 하나하나 총체적 난국인 나를 짚어보자 1. VIEW, 띄어쓰기의 왕자 나의 결과 저 %20 이 대체 무엇이냐? 바로.. 2022. 10. 3.
PromiseResult값 가져오기!! 왜 내게 찍히는 건 Object Promise의 PromiseResult뿐인가! 들어가기에 앞서, 정답은 promise는 CallBack 함수라는것 이다. 즉, retrun 하려면 .then이나, await 를 사용해야한다는것 javascript로 Cart안에 담긴 개수를 동적으로 담기 위하여! 하던대로 했다. javascript에서 ajax 요청 보내고, middleware로 만든 locals 함수를 사용하여, 전역으로 보내서~ route에서 를 거쳐~ 서버(constroller) 에서 반환해서~ javascript에서 받아서~ span을 타겟해서~ 집어넣었다! 결과는 띠용! Object Promise만 나온다! PromiseReuslt 가 밖으로 빼내지지 않아! 자, 다시말하지만 정답은 promise는 CallBack 함수라는것 이다. 서버에서 로컬로 보내는것 까지 좋으나, 받을.. 2022. 9. 29.
[... is not iterable] find() 에서 잘못 가져올 때의 오류 별건 없는데 두번째 실수해서 적어본다. ... is not iterable 는 무언가가 배열이 아닌 값임을 말해주는 것이다. 즉, 나는 분명 배열로 뽑았는데, 배열이 아니다? 아, 안뽑혔거나, 뽑던 도중 오류가 발생했다는 말과 다름없다. async function(){ await ... } 에서, 대부분의 db CRUD 동작들은 promise 를 자동반환하여, 굳이! retrun을 안해도 외부에서 값에 담긴다. 하지만, static을 써서 그런지, 초기화 되지 않은 사용자함수를 사용할 때에는 (new를 쓰지 않는), 값이 promise를 반환하지 않아서, 반드시 return으로 값을 반환해야한다. 2022. 9. 27.
하루 종일 오류랑 싸웠다. 물론 반은 내 눈썰미가... 오늘은 오류를 고치느라 3시간을 썼다. 하핫 그랬다. 앞으로 매일매일이 이렇게 될것이다! 분명하다! 으하핫... 아무튼 첫번째 커다란 오류는... 얼토당토 없이도, MODEL에 적은 파라미터를 잘못 적어서.... 파일 업로드를 위해 multer를 사용하여, 파일 정보를 받아오고, 저장위치를 잡았다. VIEW 에서 FORM 형식으로 데이터를 받아오고 (쿼리로 csrf 토큰도 추가하고!) 모든 파일정보를 받아오기 위해, enctype = "multipart/form-data" 를 사용하였다. 라우트에, multer 미들웨어를 추가하여, 받아온 파일데이터와 저장위치를 서버로 보낼 수 있었다. 서버에서 사용한 model, Contorller productData에는 req.body들이 들어갈 예정이었다. 와, .. 2022. 9. 23.
날려버린 나의 AJAX! 바보였다 바보였어 관리자 전용 페이지를 만들었다. 조오기 업데이트 버튼을 눌러서, 글을 받아오려는 것을 만들려고 했다. 새로고침을 하기 싫어서 (상품 휠로 내린거 다시 위로 쭉 올라오니까) AJAX 요청으로 하려고 했다. 그랬다. 그랬었다... 1. 버튼의 data-이름 = "값" (값에는 물품의 DB _id)으로 동적인 값을 받아 스크립트로넘기고 2. 버튼의 ID로 버튼을 선택해 아이디의 data-값을 dataset 으로 넘겨받아 3. AJAX요청으로, DB에서 값을 받아와, 사이트 내의 값을 채우고 싶었다. 문제는 중요한 곳에 있었다. 바로 2번에 버튼 ID를 받아 오는게 문제였다. 사실상, 버튼 ID를 받아오기에는, 똑같은 ID의 버튼만 계속 만들어진다. => 불가능 접근을 잘못하고 있다는 사실을 2시간 넘게 날리고.. 2022. 9. 21.
[csrf 토큰이 먹지 않아 ] 2편.... csrf토큰은 세션이 필요햇 시간은 밤 열두시... 복잡한 머리를 가라앉히고자 csruf를 통해 csrf token만 집어넣고 자려고했다! 룰루랄라 csurf 설치하고~ 패키지 불러오고~ 모든 템플릿에 한번에 보내려고 미들웨어형태로 집어넣고~ 템플릿에 hidden value 집어넣고~ 이제 우리의 토큰이, 브라우저로 들어가서, 브라우저에서 서버로 인증토큰을 딱! 제시해주면! 응 네 토큰 없어 오늘은 눈을 씻고 찾아봐도 없었다. 그 어떤 구문오류도, 오타도 한시간을 내다버리고, 일단 골이아파서 자고일어났다. 오늘 아침 문뜩 생각해보니, 서버에서 템플릿으로 싹 다 보내..? 그렇다면 혹시 내가 세션패키지를 통한 세션을 구현하지 않아서 그런가...? 일단 세션을 구현해보았다. 야홋! 된다!! 역시 사람은 잠을 자야하는거였다. 2022. 9. 20.
[res.locals.csrfToken] 난관에 봉착했다. csrf 토큰이 한쪽 controller에만 먹는다 MVC 패턴 리팩토링중... VIEW는 이미 리팩토링 하며 하고있었고, MODEL과 CONTROLLER는 완성시켜, 마무리단계로 CONFIG들을 조금씩 처리중에 있었다. 그런데 무한정 생성해놓은 오류페이지로 넘어가기 시작했다. 물론, VSCODE의 오류는 없이. 그렇다면, 모든 오류를 캡쳐하기 위해, 생성해놓은 오류페이지로 렌더된다는 것인데, 최근에 바꾼것이라곤, res.locals.csrfToken 으로, 라우트에서 따로 토큰을 부여하지않고, app.js 에서 모든 페이지에 한번에 적용하기 위한, 방책이었다. 그런데, 만들어 놓은 controller 2개 중, 한쪽의 controller에만 이게 적용되고 나머지 하나는, render할때마다 csrf 토큰 에러가 발생한다. 결론부터 말하자면, 이유는 모르.. 2022. 9. 17.
[간단한 블로그만들기 - 오류 모음3] res.locals.isAuth 를 통해, 템플릿 동적 관리하기가 안되요! 동적 템플릿 관리를 위해 res.locals 를 꺼내들었다. 그런데 웬걸? 헤더가 바뀌지 않아! 뭐가 문제일까! 문제는 미들웨어의 위치였따. 이 미들웨어는 [세션 생성 이후] 템플릿을 렌더하기 이전 [조건을 생성]해주어야 하기 때문에 세션 생성 이후, 라우터 미들웨어 이전에 위치해야한다. 아주 좋은 위치다! return 빼먹은 것도 다시 집어넣었고 헤더도 이쁘게 바꿔놓았고! 아주 깔끔하게 되었다! 로그인시 세션을 부여하여, 액세스를 제한하고 ejs 구문( ) 이외에, locals 를 사용하여, 전체 템플릿에 적용되는 동적 템플릿을 만들었다. 난이도가 높아질수록 이해하고 복습하는데, 머리나 컴퓨터나 오류가 많이 발생한다. 좀더 논리적인 하루가 되었으면 좋겠다. 2022. 9. 14.
[간단한 블로그만들기 - 오류 모음2] db에서 불러온 데이터가 없어요! 멍청이가 다시 소환되었다. 네. db를 소환하는데 await를 안했다니요. 아하하하핫 await는 써서 고쳤는데 alert라니 아직도 나는 자바스크립트의 노예가 분명하다. 2022. 9. 13.
[간단한 블로그만들기 - 오류 모음1] req.body.name 이 안먹혀요! 새로만드는 도중 자꾸 req.body.name 이 안먹힌다. 이상하다... 맞는데! name도 맞고... 다 맞고... 미들웨어도 빼먹고... 한대 맞고... 미들웨도 안적고 값을 가져오려고 했던 바보였다고한다. 2022. 9. 13.