fix : refactoring code, disunite API service and async function add. TODO watch Token statue because async state not recommend.
This commit is contained in:
45
src/vite-frontend/src/api/index.ts
Normal file
45
src/vite-frontend/src/api/index.ts
Normal 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 }
|
||||
@@ -1,4 +1,3 @@
|
||||
import axios from "axios";
|
||||
import { createStore } from 'vuex';
|
||||
|
||||
export default createStore({
|
||||
@@ -12,7 +11,13 @@ export default createStore({
|
||||
},
|
||||
setToken(state, token){
|
||||
state.token = token;
|
||||
},
|
||||
}
|
||||
},
|
||||
getters: {
|
||||
getToken(state){
|
||||
console.log(state.token);
|
||||
return state.token;
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
LOGIN({commit}, user){
|
||||
@@ -22,11 +27,11 @@ export default createStore({
|
||||
localStorage.setItem("token", user.token);
|
||||
},
|
||||
LOGOUT({commit}){
|
||||
commit("setUsername","");
|
||||
commit("setToken","");
|
||||
localStorage.removeItem("username");
|
||||
localStorage.removeItem("token");
|
||||
},
|
||||
commit("setUsername","");
|
||||
commit("setToken","");
|
||||
localStorage.removeItem("username");
|
||||
localStorage.removeItem("token");
|
||||
},
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
@@ -225,6 +225,7 @@ export default defineComponent({
|
||||
}
|
||||
}).then(response => {
|
||||
comment.body="";
|
||||
getCommentList.comment.push(response.data.comment);
|
||||
})
|
||||
}
|
||||
|
||||
@@ -233,13 +234,12 @@ export default defineComponent({
|
||||
axios.get(url + "/api/articles/" + props.slug,)
|
||||
.then(response => {
|
||||
articleDetail.article = response.data.article;
|
||||
console.log(articleDetail.article);
|
||||
})
|
||||
|
||||
axios.get(url + "/api/articles/" + props.slug + "/comments")
|
||||
.then(response => {
|
||||
getCommentList.comment = response.data.comments;
|
||||
console.log(getCommentList.comment);
|
||||
console.log(response);
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<fieldset class="form-group">
|
||||
<input class="form-control form-control-lg" type="password" placeholder="Password" v-model="user.password">
|
||||
</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
|
||||
</button>
|
||||
</form>
|
||||
@@ -33,8 +33,8 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import {reactive, ref} from "vue";
|
||||
import axios from "axios";
|
||||
import { reactive, ref } from "vue";
|
||||
import { signIn } from "@/api";
|
||||
import router from "@/router";
|
||||
import { useStore } from "vuex";
|
||||
|
||||
@@ -51,25 +51,21 @@ export default {
|
||||
|
||||
let loginValidation = ref(false);
|
||||
|
||||
const signin = () => {
|
||||
const url = import.meta.env.VITE_BASE_URL;
|
||||
axios.post(url+'/api/users/login',{
|
||||
user
|
||||
})
|
||||
.then(response => {
|
||||
store.dispatch("LOGIN",response.data.user);
|
||||
router.push({name:"Home"});
|
||||
})
|
||||
.catch(error =>{
|
||||
const code = error.response.data.errors.code;
|
||||
if(code == "EMAIL_NULL_OR_INVALID"){
|
||||
loginValidation.value = true;
|
||||
}else if(code == "PASSWORD_WORNG"){
|
||||
loginValidation.value = true;
|
||||
}
|
||||
})
|
||||
const Login = async () => {
|
||||
try{
|
||||
const { data } = await signIn(user);
|
||||
store.dispatch("LOGIN",data.user);
|
||||
router.push({name:"Home"});
|
||||
}catch(error: any){
|
||||
const code = error.response.data.errors.code;
|
||||
if(code == "EMAIL_NULL_OR_INVALID"){
|
||||
loginValidation.value = true;
|
||||
}else if(code == "PASSWORD_WRONG"){
|
||||
loginValidation.value = true;
|
||||
}
|
||||
};
|
||||
}
|
||||
return {user, loginValidation, signin};
|
||||
return {user, loginValidation, Login};
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
<ul class="error-messages" v-if="usernameDuplicate">
|
||||
<li align="left">username has already been taken</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<form>
|
||||
<fieldset class="form-group">
|
||||
<input class="form-control form-control-lg" type="text" placeholder="Your Name" v-model="user.username">
|
||||
@@ -28,7 +26,7 @@
|
||||
<fieldset class="form-group">
|
||||
<input class="form-control form-control-lg" type="password" placeholder="Password" v-model="user.password">
|
||||
</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
|
||||
</button>
|
||||
</form>
|
||||
@@ -41,9 +39,9 @@
|
||||
|
||||
<script lang="ts">
|
||||
|
||||
import axios from "axios";
|
||||
import { signUp } from "@/api";
|
||||
import router from "@/router";
|
||||
import {reactive, ref} from "vue";
|
||||
import { reactive, ref } from "vue";
|
||||
import { useStore } from "vuex";
|
||||
|
||||
export default {
|
||||
@@ -73,28 +71,24 @@ export default {
|
||||
emailDuplicate.value = false;
|
||||
};
|
||||
|
||||
const signup = () => {
|
||||
const url = import.meta.env.VITE_BASE_URL;
|
||||
axios.post(url+'/api/users',{
|
||||
user
|
||||
})
|
||||
.then(response => {
|
||||
store.dispatch("LOGIN",response.data.user);
|
||||
router.push({name:"Home"});
|
||||
})
|
||||
.catch(error =>{
|
||||
const code = error.response.data.errors.code;
|
||||
if(code == "DUPLICATE_EMAIL_USERNAME"){
|
||||
showEmailUsernameError();
|
||||
}else if(code == "DUPLICATE_EMAIL"){
|
||||
showEmailError();
|
||||
}else if(code == "DUPLICATE_USERNAME"){
|
||||
showUsernameError();
|
||||
}
|
||||
})
|
||||
const register = async () => {
|
||||
try{
|
||||
const { data } = await signUp(user);
|
||||
store.dispatch("LOGIN",data.user);
|
||||
router.push({name:"Home"});
|
||||
}catch(error: any){
|
||||
const code = error.response.data.errors.code;
|
||||
if(code == "DUPLICATE_EMAIL_USERNAME"){
|
||||
showEmailUsernameError();
|
||||
}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 }
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<fieldset class="form-group">
|
||||
<input class="form-control form-control-lg" type="password" placeholder="Password" v-model="password">
|
||||
</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
|
||||
</button>
|
||||
</fieldset>
|
||||
@@ -42,16 +42,15 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import axios from "axios";
|
||||
import router from "@/router";
|
||||
import { getCurrentUser, updateUser } from "@/api";
|
||||
import { useStore } from "vuex";
|
||||
import router from "@/router";
|
||||
import { onMounted, reactive } from "vue";
|
||||
|
||||
export default {
|
||||
name: "TheSetting",
|
||||
setup() {
|
||||
const url = import.meta.env.VITE_BASE_URL;
|
||||
const token = localStorage.getItem("token");
|
||||
const user = reactive({
|
||||
bio: "",
|
||||
email: "",
|
||||
@@ -69,23 +68,21 @@ export default {
|
||||
user.image = getuser.image
|
||||
}
|
||||
|
||||
const updateUser = () => {
|
||||
axios.put(url+'/api/user',{user},{
|
||||
headers:{
|
||||
Authorization : "TOKEN " + token,
|
||||
"Content-Type": `application/json`,
|
||||
}})
|
||||
.then(response => {
|
||||
store.dispatch("LOGIN",response.data.user);
|
||||
router.push({
|
||||
name: 'Profile',
|
||||
params: {username: response.data.user.username}})
|
||||
|
||||
})
|
||||
.catch(error =>{
|
||||
const code = error.response.data.errors.code;
|
||||
//TODO 예외처리
|
||||
})
|
||||
const setUser = async () => {
|
||||
try{
|
||||
console.log(await updateUser(user));
|
||||
/*
|
||||
const { data } = await updateUser(user);
|
||||
store.dispatch("LOGIN", data.user);
|
||||
router.push({
|
||||
name: 'Profile',
|
||||
params: {username: data.user.username}
|
||||
})*/
|
||||
}catch(error:any){
|
||||
// Todo Error처리
|
||||
const code = error.response.data.errors.code;
|
||||
console.log(code);
|
||||
}
|
||||
}
|
||||
|
||||
const logout = () =>{
|
||||
@@ -95,22 +92,18 @@ export default {
|
||||
}
|
||||
|
||||
|
||||
onMounted(() => {
|
||||
axios.get(url+'/api/user',{
|
||||
headers:{
|
||||
Authorization : "TOKEN " + token
|
||||
}
|
||||
})
|
||||
.then(response => {
|
||||
store.dispatch("LOGIN",response.data.user)
|
||||
getUser(response.data.user);
|
||||
})
|
||||
.catch(error =>{
|
||||
const code = error.response.data.errors.code;
|
||||
//TODO 예외처리
|
||||
})
|
||||
onMounted(async () => {
|
||||
try {
|
||||
const { data } = await getCurrentUser();
|
||||
store.dispatch("LOGIN", data.user)
|
||||
getUser(data.user);
|
||||
} catch (error: any) {
|
||||
//TODO error처리
|
||||
console.log(error);
|
||||
}
|
||||
})
|
||||
return {user, password, url, token, getUser, updateUser, logout};
|
||||
|
||||
return {user, password, url, getUser, setUser, logout};
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -16,14 +16,6 @@ export default defineConfig({
|
||||
server: {
|
||||
https: true,
|
||||
port: 4000,
|
||||
proxy:{
|
||||
'/': {
|
||||
target : "http://3.35.44.58:8080",
|
||||
rewrite: (path) => path.replace(/^\//,''),
|
||||
changeOrigin: true,
|
||||
secure: false
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
plugins: [vue(),basicSsl()]
|
||||
|
||||
Reference in New Issue
Block a user