前端如何请求后台和跨域解决方法

前端使用vue3.0+Elementui搭建页面:

有个新增按钮,点击后出现弹窗,弹窗里是表单信息,点击确认后新增进数据库。

新建两个文件request.js文件:

 

request.js

import axios from 'axios'

const request = axios.create({
    timeout: 5000
})

// request 拦截器
// 可以自请求发送前对请求做一些处理
// 比如统一加token,对请求参数统一加密
request.interceptors.request.use(config => {
    config.headers['Content-Type'] = 'application/json;charset=utf-8';

    // config.headers['token'] = user.token;  // 设置请求头
    return config
}, error => {
    return Promise.reject(error)
});

// response 拦截器
// 可以在接口响应后统一处理结果
request.interceptors.response.use(
    response => {
        let res = response.data;
        // 如果是返回的文件
        if (response.config.responseType === 'blob') {
            return res
        }
        // 兼容服务端返回的字符串数据
        if (typeof res === 'string') {
            res = res ? JSON.parse(res) : res
        }
        return res;
    },
    error => {
        console.log('err' + error) // for debug
        return Promise.reject(error)
    }
)


export default request

新增按钮:

<el-button type="primary" @click="add">新增</el-button>

弹窗内容:

 <el-dialog
                title="提示"
                v-model="dialogVisible"
                width="30%"
                >
            <el-form :model="form" label-width="120px">
                <el-form-item label="用户名">
                    <el-input v-model="form.username" style="width:300px;"></el-input>
                </el-form-item>


                <el-form-item label="昵称">
                    <el-input v-model="form.nickname" style="width:300px;"></el-input>
                </el-form-item>

                <el-form-item label="年龄">
                    <el-input v-model="form.age" style="width:300px;"></el-input>
                </el-form-item>


                <el-form-item label="性别">
                    <el-radio v-model="form.sex" label="男">男</el-radio>
                    <el-radio v-model="form.sex" label="女">女</el-radio>
                    <el-radio v-model="form.sex" label="未知">未知</el-radio>
                </el-form-item>

                <el-form-item label="地址">
                    <el-input v-model="form.address" style="width:300px;"></el-input>
                </el-form-item>
            </el-form>

            <template #footer>
    <span class="dialog-footer">
      <el-button @click="dialogVisible = false">取 消</el-button>
      <el-button type="primary" @click="save">确 定</el-button>
    </span>
            </template>
        </el-dialog>

默认弹窗不显示,form表单是空白

export default {
        name: 'Home',
        components: {},
        data() {
            return {
                dialogVisible:false,
                form:{},
            }
        }
     
    }

点击添加按钮,弹窗设置为true,表单依旧设置为空白:

export default {
        name: 'Home',
        components: {},
        data() {
            return {
                dialogVisible:false,
                form:{},
            }
        },
        methods:{
            add(){
                this.dialogVisible =true;
                this.form = {};
            }
        }
    }

表单中输入信息点击确定按钮:

import request from "@/utils/request";

export default {
        name: 'Home',
        components: {},
        data() {
            return {
                dialogVisible:false,
                form:{},
            }
        },
        methods:{
            add(){
                this.dialogVisible =true;
                this.form = {};
            },
             save(){
                request.post("http://localhost:9090/user/save",this.form).then(res =>{
                    console.log(res);
                })
            },
        }
    }

前端访问地址:http://localhost:8080/

后端访问地址:http://localhost:9090

出现跨域问题:

 

 新增一个vue.config.js文件

 

// 跨域配置
module.exports = {
    devServer: {                //记住,别写错了devServer//设置本地默认端口  选填
        port: 8080,
        proxy: {                 //设置代理,必须填
            '/api': {              //设置拦截器  拦截器格式   斜杠+拦截器名字,名字可以自己定
                target: 'http://localhost:9090',     //代理的目标地址
                changeOrigin: true,              //是否设置同源,输入是的
                pathRewrite: {                   //路径重写
                    '/api': ''                     //选择忽略拦截器里面的单词
                }
            }
        }
    }
}

把文件地址替换成api

import request from "@/utils/request";

export default {
        name: 'Home',
        components: {},
        data() {
            return {
                dialogVisible:false,
                form:{},
            }
        },
        methods:{
            add(){
                this.dialogVisible =true;
                this.form = {};
            },
             save(){
                request.post("/api/user/save",this.form).then(res =>{
                    console.log(res);
                })
            },
        }
    }

最后重启服务 后台可以进断点

 

  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值