From fd451a6f82fc9c81ab206fa915467118098fe692 Mon Sep 17 00:00:00 2001 From: aaron <462826@qq.com> Date: Thu, 5 Nov 2020 16:38:30 +0800 Subject: [PATCH] client http cros request --- src/server/admin.go | 32 +++++++++++++++++++++++++ src/server/common.go | 11 +++++++++ src/zd.go | 7 ++---- ui/package.json | 1 + ui/src/api/manage.js | 17 ++++++++++++++ ui/src/utils/axios.js | 35 +++++++++++++++++++++++++++ ui/src/utils/request.js | 48 ++++++++++++++++++++++++++++++++++++++ ui/src/views/test/Test.vue | 24 ++++++++++++++++++- ui/vue.config.js | 13 +++++++++++ 9 files changed, 182 insertions(+), 6 deletions(-) create mode 100644 src/server/admin.go create mode 100644 src/server/common.go create mode 100644 ui/src/api/manage.js create mode 100644 ui/src/utils/axios.js create mode 100644 ui/src/utils/request.js create mode 100644 ui/vue.config.js diff --git a/src/server/admin.go b/src/server/admin.go new file mode 100644 index 00000000..70b12700 --- /dev/null +++ b/src/server/admin.go @@ -0,0 +1,32 @@ +package server + +import ( + "encoding/json" + logUtils "github.com/easysoft/zendata/src/utils/log" + "io" + "net/http" +) + +func AdminHandler(writer http.ResponseWriter, req *http.Request) { + setupCORS(&writer, req) + logUtils.PrintToScreen("111") + + ret := new(Ret) + id := req.FormValue("id") + //id := req.PostFormValue('id') + + ret.Code = 0 + ret.Param = id + ret.Msg = "success" + ret.Data = map[string]interface{}{"key": "value"} + ret_json,_ := json.Marshal(ret) + + io.WriteString(writer, string(ret_json)) +} + +type Ret struct{ + Code int + Param string + Msg string + Data interface{} +} diff --git a/src/server/common.go b/src/server/common.go new file mode 100644 index 00000000..9f1ec512 --- /dev/null +++ b/src/server/common.go @@ -0,0 +1,11 @@ +package server + +import ( + "net/http" +) + +func setupCORS(w *http.ResponseWriter, req *http.Request) { + (*w).Header().Set("Access-Control-Allow-Origin", "*") + (*w).Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE") + (*w).Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization") +} diff --git a/src/zd.go b/src/zd.go index 3fd61678..1bc6094c 100644 --- a/src/zd.go +++ b/src/zd.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/easysoft/zendata/src/action" "github.com/easysoft/zendata/src/gen" + "github.com/easysoft/zendata/src/server" "github.com/easysoft/zendata/src/service" commonUtils "github.com/easysoft/zendata/src/utils/common" configUtils "github.com/easysoft/zendata/src/utils/config" @@ -241,7 +242,7 @@ func StartServer() { vari.Ip, port, vari.Ip, port, vari.Ip, port), color.FgCyan) http.HandleFunc("/", DataHandler) - http.HandleFunc("/admin", AdminHandler) + http.HandleFunc("/admin", server.AdminHandler) err := http.ListenAndServe(fmt.Sprintf(":%d", vari.Port), nil) if err != nil { @@ -249,10 +250,6 @@ func StartServer() { } } -func AdminHandler(writer http.ResponseWriter, req *http.Request) { - logUtils.PrintToScreen("111") -} - func DataHandler(writer http.ResponseWriter, req *http.Request) { logUtils.HttpWriter = writer diff --git a/ui/package.json b/ui/package.json index 71b7912c..e1f93c82 100644 --- a/ui/package.json +++ b/ui/package.json @@ -9,6 +9,7 @@ }, "dependencies": { "ant-design-vue": "^1.7.1", + "axios": "^0.21.0", "core-js": "^3.6.5", "less": "^2.x", "less-loader": "^3.x", diff --git a/ui/src/api/manage.js b/ui/src/api/manage.js new file mode 100644 index 00000000..918269bf --- /dev/null +++ b/ui/src/api/manage.js @@ -0,0 +1,17 @@ +import request from '../utils/request' + +const api = { + admin: '', + res: '/res', + def: '/defs', +} + +export default api + +export function listDefs () { + return request({ + url: api.admin, + method: 'get', + params: {} + }) +} diff --git a/ui/src/utils/axios.js b/ui/src/utils/axios.js new file mode 100644 index 00000000..3b91f6b5 --- /dev/null +++ b/ui/src/utils/axios.js @@ -0,0 +1,35 @@ +const VueAxios = { + vm: {}, + // eslint-disable-next-line no-unused-vars + install (Vue, instance) { + if (this.installed) { + return + } + this.installed = true + + if (!instance) { + // eslint-disable-next-line no-console + console.error('You have to install axios') + return + } + + Vue.axios = instance + + Object.defineProperties(Vue.prototype, { + axios: { + get: function get () { + return instance + } + }, + $http: { + get: function get () { + return instance + } + } + }) + } +} + +export { + VueAxios +} diff --git a/ui/src/utils/request.js b/ui/src/utils/request.js new file mode 100644 index 00000000..0b4c0c85 --- /dev/null +++ b/ui/src/utils/request.js @@ -0,0 +1,48 @@ +import notification from 'ant-design-vue/es/notification' +import axios from 'axios' +import { VueAxios } from './axios' + +const request = axios.create({ + baseURL: 'http://localhost:8848/admin', + timeout: 6000, +}) + +const errorHandler = error => { + if (error.response) { + const data = error.response.data + + if (error.response.status === 403) { + notification.error({ + message: 'Forbidden', + description: data.message + }) + } + if (error.response.status === 401) { + notification.error({ + message: 'Unauthorized', + description: 'Authorization verification failed' + }) + } + } + return Promise.reject(error) +} + +// request interceptor +request.interceptors.request.use(config => { + return config +}, errorHandler) + +// response interceptor +request.interceptors.response.use(response => { + return response.data +}, errorHandler) + +const installer = { + vm: {}, + install (Vue) { + Vue.use(VueAxios, request) + } +} + +export default request +export { installer as VueAxios, request as axios } diff --git a/ui/src/views/test/Test.vue b/ui/src/views/test/Test.vue index 65342f5a..34799812 100644 --- a/ui/src/views/test/Test.vue +++ b/ui/src/views/test/Test.vue @@ -11,8 +11,30 @@ diff --git a/ui/vue.config.js b/ui/vue.config.js new file mode 100644 index 00000000..17ff70ed --- /dev/null +++ b/ui/vue.config.js @@ -0,0 +1,13 @@ +const path = require('path'); + +function resolve(dir) { + return path.join(__dirname, dir) +} + +module.exports = { + chainWebpack: (config) => { + config.resolve.alias + .set('@', resolve('./src')) + // .set('components',resolve('./src/components')) + } +} -- GitLab