fix : refactoring code, disunite API service and async function add. TODO watch Token statue because async state not recommend.

This commit is contained in:
kms
2022-12-01 01:08:05 +09:00
parent ce1e1ca573
commit aeb52fa2f4
7 changed files with 124 additions and 99 deletions

View File

@@ -0,0 +1,45 @@
import axios, {AxiosResponse} from "axios";
import { useStore } from "vuex";
//TODO
//임시방편 watch로 바라보는게 더 좋다고함. watch로 감시하자. Token
const getToken = () => {
let test = useStore().getters.getToken;
console.log(test)
return test;
}
const axiosService = axios.create({
baseURL: import.meta.env.VITE_BASE_URL,
})
const signUp = async (user: object): Promise<AxiosResponse> => {
return axiosService.post('/api/users',{user});
}
const signIn = async (user: object): Promise<AxiosResponse> => {
return axiosService.post('/api/users/login',{user})
}
const getCurrentUser = async (): Promise<AxiosResponse> => {
let currentToken = localStorage.getItem("token");
return axiosService.get('/api/user', {
headers: {
Authorization: "TOKEN " + currentToken
}
})
}
const updateUser = async (user: object): Promise<AxiosResponse> => {
let currentToken = localStorage.getItem("token");
console.log(user);
console.log(currentToken);
return axiosService.put('/api/user', {user}, {
headers: {
Authorization: "TOKEN " + currentToken,
"Content-Type": `application/json`,
}
})
}
export { signUp, signIn, getCurrentUser, updateUser }

View File

@@ -1,4 +1,3 @@
import axios from "axios";
import { createStore } from 'vuex'; import { createStore } from 'vuex';
export default createStore({ export default createStore({
@@ -12,7 +11,13 @@ export default createStore({
}, },
setToken(state, token){ setToken(state, token){
state.token = token; state.token = token;
}, }
},
getters: {
getToken(state){
console.log(state.token);
return state.token;
}
}, },
actions: { actions: {
LOGIN({commit}, user){ LOGIN({commit}, user){
@@ -22,11 +27,11 @@ export default createStore({
localStorage.setItem("token", user.token); localStorage.setItem("token", user.token);
}, },
LOGOUT({commit}){ LOGOUT({commit}){
commit("setUsername",""); commit("setUsername","");
commit("setToken",""); commit("setToken","");
localStorage.removeItem("username"); localStorage.removeItem("username");
localStorage.removeItem("token"); localStorage.removeItem("token");
}, },
}, },
} }
) )

View File

@@ -225,6 +225,7 @@ export default defineComponent({
} }
}).then(response => { }).then(response => {
comment.body=""; comment.body="";
getCommentList.comment.push(response.data.comment);
}) })
} }
@@ -233,13 +234,12 @@ export default defineComponent({
axios.get(url + "/api/articles/" + props.slug,) axios.get(url + "/api/articles/" + props.slug,)
.then(response => { .then(response => {
articleDetail.article = response.data.article; articleDetail.article = response.data.article;
console.log(articleDetail.article);
}) })
axios.get(url + "/api/articles/" + props.slug + "/comments") axios.get(url + "/api/articles/" + props.slug + "/comments")
.then(response => { .then(response => {
getCommentList.comment = response.data.comments; getCommentList.comment = response.data.comments;
console.log(getCommentList.comment);
console.log(response);
}) })
}) })

View File

@@ -21,7 +21,7 @@
<fieldset class="form-group"> <fieldset class="form-group">
<input class="form-control form-control-lg" type="password" placeholder="Password" v-model="user.password"> <input class="form-control form-control-lg" type="password" placeholder="Password" v-model="user.password">
</fieldset> </fieldset>
<button @click = "signin" class="btn btn-lg btn-primary pull-xs-right"> <button @click = "Login" class="btn btn-lg btn-primary pull-xs-right">
Sign in Sign in
</button> </button>
</form> </form>
@@ -33,8 +33,8 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import {reactive, ref} from "vue"; import { reactive, ref } from "vue";
import axios from "axios"; import { signIn } from "@/api";
import router from "@/router"; import router from "@/router";
import { useStore } from "vuex"; import { useStore } from "vuex";
@@ -51,25 +51,21 @@ export default {
let loginValidation = ref(false); let loginValidation = ref(false);
const signin = () => { const Login = async () => {
const url = import.meta.env.VITE_BASE_URL; try{
axios.post(url+'/api/users/login',{ const { data } = await signIn(user);
user store.dispatch("LOGIN",data.user);
}) router.push({name:"Home"});
.then(response => { }catch(error: any){
store.dispatch("LOGIN",response.data.user); const code = error.response.data.errors.code;
router.push({name:"Home"}); if(code == "EMAIL_NULL_OR_INVALID"){
}) loginValidation.value = true;
.catch(error =>{ }else if(code == "PASSWORD_WRONG"){
const code = error.response.data.errors.code; loginValidation.value = true;
if(code == "EMAIL_NULL_OR_INVALID"){ }
loginValidation.value = true; };
}else if(code == "PASSWORD_WORNG"){
loginValidation.value = true;
}
})
} }
return {user, loginValidation, signin}; return {user, loginValidation, Login};
} }

View File

@@ -16,8 +16,6 @@
<ul class="error-messages" v-if="usernameDuplicate"> <ul class="error-messages" v-if="usernameDuplicate">
<li align="left">username has already been taken</li> <li align="left">username has already been taken</li>
</ul> </ul>
<form> <form>
<fieldset class="form-group"> <fieldset class="form-group">
<input class="form-control form-control-lg" type="text" placeholder="Your Name" v-model="user.username"> <input class="form-control form-control-lg" type="text" placeholder="Your Name" v-model="user.username">
@@ -28,7 +26,7 @@
<fieldset class="form-group"> <fieldset class="form-group">
<input class="form-control form-control-lg" type="password" placeholder="Password" v-model="user.password"> <input class="form-control form-control-lg" type="password" placeholder="Password" v-model="user.password">
</fieldset> </fieldset>
<button @click = "signup" class="btn btn-lg btn-primary pull-xs-right"> <button @click = "register" class="btn btn-lg btn-primary pull-xs-right">
Sign up Sign up
</button> </button>
</form> </form>
@@ -41,9 +39,9 @@
<script lang="ts"> <script lang="ts">
import axios from "axios"; import { signUp } from "@/api";
import router from "@/router"; import router from "@/router";
import {reactive, ref} from "vue"; import { reactive, ref } from "vue";
import { useStore } from "vuex"; import { useStore } from "vuex";
export default { export default {
@@ -73,28 +71,24 @@ export default {
emailDuplicate.value = false; emailDuplicate.value = false;
}; };
const signup = () => { const register = async () => {
const url = import.meta.env.VITE_BASE_URL; try{
axios.post(url+'/api/users',{ const { data } = await signUp(user);
user store.dispatch("LOGIN",data.user);
}) router.push({name:"Home"});
.then(response => { }catch(error: any){
store.dispatch("LOGIN",response.data.user); const code = error.response.data.errors.code;
router.push({name:"Home"}); if(code == "DUPLICATE_EMAIL_USERNAME"){
}) showEmailUsernameError();
.catch(error =>{ }else if(code == "DUPLICATE_EMAIL"){
const code = error.response.data.errors.code; showEmailError();
if(code == "DUPLICATE_EMAIL_USERNAME"){ }else if(code == "DUPLICATE_USERNAME"){
showEmailUsernameError(); showUsernameError();
}else if(code == "DUPLICATE_EMAIL"){ }
showEmailError(); }
}else if(code == "DUPLICATE_USERNAME"){
showUsernameError();
}
})
} }
return { user, emailDuplicate, usernameDuplicate, signup, showEmailUsernameError,showEmailError, showUsernameError } return { user, emailDuplicate, usernameDuplicate, register, showEmailUsernameError,showEmailError, showUsernameError }
}, },
} }

View File

@@ -25,7 +25,7 @@
<fieldset class="form-group"> <fieldset class="form-group">
<input class="form-control form-control-lg" type="password" placeholder="Password" v-model="password"> <input class="form-control form-control-lg" type="password" placeholder="Password" v-model="password">
</fieldset> </fieldset>
<button @click = "updateUser" class="btn btn-lg btn-primary pull-xs-right"> <button @click="setUser" class="btn btn-lg btn-primary pull-xs-right">
Update Settings Update Settings
</button> </button>
</fieldset> </fieldset>
@@ -42,16 +42,15 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import axios from "axios"; import { getCurrentUser, updateUser } from "@/api";
import router from "@/router";
import { useStore } from "vuex"; import { useStore } from "vuex";
import router from "@/router";
import { onMounted, reactive } from "vue"; import { onMounted, reactive } from "vue";
export default { export default {
name: "TheSetting", name: "TheSetting",
setup() { setup() {
const url = import.meta.env.VITE_BASE_URL; const url = import.meta.env.VITE_BASE_URL;
const token = localStorage.getItem("token");
const user = reactive({ const user = reactive({
bio: "", bio: "",
email: "", email: "",
@@ -69,23 +68,21 @@ export default {
user.image = getuser.image user.image = getuser.image
} }
const updateUser = () => { const setUser = async () => {
axios.put(url+'/api/user',{user},{ try{
headers:{ console.log(await updateUser(user));
Authorization : "TOKEN " + token, /*
"Content-Type": `application/json`, const { data } = await updateUser(user);
}}) store.dispatch("LOGIN", data.user);
.then(response => { router.push({
store.dispatch("LOGIN",response.data.user); name: 'Profile',
router.push({ params: {username: data.user.username}
name: 'Profile', })*/
params: {username: response.data.user.username}}) }catch(error:any){
// Todo Error처리
}) const code = error.response.data.errors.code;
.catch(error =>{ console.log(code);
const code = error.response.data.errors.code; }
//TODO 예외처리
})
} }
const logout = () =>{ const logout = () =>{
@@ -95,22 +92,18 @@ export default {
} }
onMounted(() => { onMounted(async () => {
axios.get(url+'/api/user',{ try {
headers:{ const { data } = await getCurrentUser();
Authorization : "TOKEN " + token store.dispatch("LOGIN", data.user)
} getUser(data.user);
}) } catch (error: any) {
.then(response => { //TODO error처리
store.dispatch("LOGIN",response.data.user) console.log(error);
getUser(response.data.user); }
})
.catch(error =>{
const code = error.response.data.errors.code;
//TODO 예외처리
})
}) })
return {user, password, url, token, getUser, updateUser, logout};
return {user, password, url, getUser, setUser, logout};
} }
} }
</script> </script>

View File

@@ -16,14 +16,6 @@ export default defineConfig({
server: { server: {
https: true, https: true,
port: 4000, port: 4000,
proxy:{
'/': {
target : "http://3.35.44.58:8080",
rewrite: (path) => path.replace(/^\//,''),
changeOrigin: true,
secure: false
}
}
}, },
plugins: [vue(),basicSsl()] plugins: [vue(),basicSsl()]