2019년 2월 21일 목요일
자바스크립트로 서버와 클라이언트 구축하기 - 불평불만
앞부분의 설명들은 읽기가 너무 버거워 쇼핑몰 프로젝트 예제만 진행하는데...
multer를 사용하는 파일 업로드 부분에서 막혔다.
예제의 소스코드를 그대로 따라해보니..
multer를 사용하는 부분에서 (422페이지 axios라는 라이브러리를 사용하기전)
req.file.filename << 이게 undefined 라고 계속 나오는데
따라가보니 shop/page/registry.vue 의
폼 부분에서 enctype="multipart/form-data" 라는 한 줄이 빠져서
<input type="file" name="img">
부분이 서버쪽에선 아무리 req.file을 찾아보려 해도 찾을 수 가 없지!
굉장히 사소한 부분이지만 책을 따라가는 입장에선 이거 한줄로 막혀버려 포기할수도 있다.
물론 다무시하고 axios를 사용하는 부분으로 넘어가면(아직 거기까진 해보지 않았지만
axios는 폼대신 사용하니 enctype을 따로 명시해주지 않아도 돌아갈지 모르겠지만)
내 소스는 문제없이 돌아가는데? 라고 말해버리면 할 말없지만 html 폼을 처음 접하는 친구들은
아니 대체 뭘해야 axios 안써도 db에 파일명이 들어가는거지? 라는 의문이 생기지 않을까?
대상독자 : 초중급
이런거 찾을줄 알아야 초중급에 드는거다! 라면 할 말없고 ㅋㅋ
<template>
<div class="container">
<form action="/api/v1.0/admin/clothes/registry"
enctype="multipart/form-data"
method="post">
<label for="옷 이름">옷 이름</label>
<input type="text" name="name">
<label for="옷 가격">옷 가격</label>
<input type="text" name="price">
<label for="옷 카테고리">옷 카테고리</label>
<select name="category">
<option v-for="cate in categories" v-bind:value="cate" :key="cate">
{{cate}}
</option>
</select>
<label for="옷 이미지">옷 이미지</label>
<input type="file" name="img">
<button type="submit"> 등록하기 </button>
</form>
</div>
</template>
페이지 424 클라이언트 구현에서 그대로따라가다보면
UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 10)
이런 에러를 보여주는데 캐치블록이 없기때문에 이런 에러를 뿌린다.
검색해보니
이런식으로 수정하면 db의 내용을 보여준다.
import axios from 'axios'
export default{
asyncData ({ params, error }) {
return axios.get(`http://localhost:3000/api/v1.0/admin/clothes`)
.then((res) => {
return { clothes: res.data }
})
.catch((e) => {
error({ statusCode: 404, message: 'clothes not found' })
})
}
}
페이지 433을 보면 유저리스트를 읽어와서 페이지네이션 하는부분이 있는데
왜 또 shop/pages/admin/clothes.vue 가 나오는건지.. 뭔가 의아한데? 라고 생각했는데
역시나 users.vue가 맞는거같다 ㅋㅋ
내용은 걍 clothes.vue의 코드내용과 같은 내용이라 수정이 안된거같다. ;;;;
435페이지를 보면;;; 유저들에 price가 왜있나 의아했다. 왜 고객의 가치를 쇼핑몰이 매기고있을까
다시 411페이지로 돌아가보니 유저가 보유하고있는 돈이었다.
어떻게든 446페이지까지는 실습을 진행해왔다.
여기서 문제점이 발생하는데
nuxt.js를 사용할때 서버를 구동시
1. sudo node server/index.js 로 구동 하는가?
2. sudo npm run dev 로 구동하는가에 따라
2번으로 했을때 서버페이지가 열리지 않거나 1번으로했을때 서버페이지는 열리지만
localhost:3000/ 으로 접속시 무조건 빈페이지를 반환하는 문제점이 생겼다.
localhost:3000/index 로 접속하면 일단 this page could not be found 라는 메시지를 보여주고
back to the home page 라는 링크를 보여주는데 클릭하면
url 은 localhost:3000/으로 가며 내가원하는 cloth를 db에서 정상적으로 읽어서 가져온다.
라우터에서 localhost:3000/ 으로 연결하는 설정이 뭔가 사전에 이루어져서 이런 문제가 발생하는듯 하다.
책에선 사용자 방문하면 관리자가 등록한 cloth들이 주욱 페이징 처리되어 나오고 여기서 클릭으로 들어가면 상세페이지로 나와야 하는데 무조건 localhost:3000/에서 새로고침 하면 빈화면만 나온다.
왜안될까??
피드 구독하기:
댓글 (Atom)
-
운영체제를 다시 설치할때 보통 윈도우 인스톨러인가 UUI ? 뭐 정확히는몰라도 여러가지 프로그램을 사용하는데 이번에 rufus 라는 프로그램을 접하게 되었다. rufus 오류 미디어를 열 수 없습니다. 이런 오류를 뿜으면서 자꾸 안된다. ...
-
Unknown custom element: <router-link> - did you register the component correctly? For recursive components, make sure to provide the &...
-
말그대로 자바스크립트 함수는 찾는데 실행이 안되는때가 있었다. 언제? 오늘 1시간정도 전에 $("#ID").on("change", function(){ }); 상단에 머 이런 이벤트 핸들러는 잘 동작하는...
댓글 없음:
댓글 쓰기