前后端交互的一个简单实现(axios)

文章讲述了如何使用Python的Flask框架接收前端Vue3应用通过axios发送的音频文件。Flask端处理POST请求,保存文件并设置跨域访问。Vue3项目中,配置Vite代理到Flask服务器,axios封装请求,处理上传文件并展示响应信息。
摘要由CSDN通过智能技术生成

后端python

          接收前端使用axios传送的音频文件(以传送音频文件为例)

这段代码是一个 Flask 应用,当接收到一个 POST 请求时,从请求中获取音频文件,保存到服务器上指定的路径,并返回一个上传成功的消息。其中 response.headers['Access-Control-Allow-Origin'] = '*' 这一行设置了允许跨域访问。如果没有这一行,则前端在上传文件时会遇到跨域问题,因为默认情况下,Flask 只允许在本域名下进行请求,如果要跨域请求,则需要进行设置。

from flask import Flask, request, jsonify
import os
app = Flask(__name__)
# 指定可以访问的目录
app.config['UPLOAD_FOLDER'] = os.path.abspath(os.path.dirname(__file__))

@app.route('/uplode', methods=['POST'])
def upload_audio():
    file = request.files.get('audio')
    if not file:
        return jsonify({'message': '请选择一个音频文件'}), 400

    # 保存音频文件到服务器上的某个路径
    file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
    response = jsonify({'message': '上传成功'})
    response.headers['Access-Control-Allow-Origin'] = '*'
    return response, 200

if __name__ == '__main__':
    app.run(port=5000)

前端Vue3:

 1、vite.config.js配置

          项目是在同一台电脑上进行的操作。这是一个 Vite 配置文件,其中 fileURLToPathURL 是来自 Node.js 标准库的模块,用于将 URL 转换为文件路径。在这个配置文件中,使用了 fileURLToPathURL 将项目中的 @ 别名指向 src 目录,并配置了 Vite 的开发服务器将请求转发到 http://127.0.0.1:5000/,这样在前端代码中请求 /xxx 的时候,就会被代理到 http://127.0.0.1:5000/xxx

import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  },
  server:{
    proxy:{
      '/api': {
        target: 'http://127.0.0.1:5000/',
        changeOrigin: true,
        // 后端服务器路径不存在api路径,所以要去掉
        rewrite: (path) => path.replace(/^\/api/, ''),
      },
    }
  }
})

2、设置代理,axios封装,api解耦:

          request.js是定义在项目utils/api下的

import axios from 'axios';

//1. 创建axios对象
const service = axios.create();

//2. 请求拦截器
service.interceptors.request.use(config => {
  return config;
}, error => {
  Promise.reject(error);
});

//3. 响应拦截器
service.interceptors.response.use(response => {
  //判断code码
  return response;
},error => {
  return Promise.reject(error);
});

export default service;

          audio.js定义在项目utils/api下的

import request from './request'
export function audio(data){
    return request({
        url:'/api/uplode',
        method:'post',
        data,
        headers:{
            'Content-Type': 'multipart/form-data'
        }
    })
}

3、uploadAudio.vue

script 标签中,我们导入了 axiosvueref 方法。这里用了 ref 来获得文件输入框,将其绑定到 audioFile 变量上。通过点击上传按钮,触发 uploadFile 函数,将 audioFile 中选中的文件转换成 FormData 格式,以 POST 方式发送给服务器端。同时,在控制台打印了服务器返回的响应信息。

需要注意的是,在你的 Flask 服务器代码中,要添加跨域请求的设置,以便允许 Vue3 应用程序的跨域访问。

<template>
    <form action="" class="form">
        <input type="file" accept="audio/*" ref="audioFile">
        <button type="button" @click="uploadFile">上传音频</button>
    </form>
</template>
<script setup>
import { ref } from 'vue'
import { audio } from '../utils/api/audio';
let audioFile = ref(null)
const uploadFile = () =>{
    let file = audioFile.value.files[0]
    if(!file){
        console.error('请输入文件');
        return
    }
    const formDate = new FormData();
    formDate.append('audio',file);
    audio(formDate).then(res=>{
        console.log(res.data.message);
    }).catch(error=>{
        console.log(error);
    })
}
</script>
<style scoped>
</style>

当然,以下是一个使用Axios进行前后端数据交互的案例: 在这个案例中,我们将展示一个简单前后端交互流程,其中前端使用Axios发送HTTP请求,后端使用Node.js和Express处理请求并返回响应。 前端代码(使用Axios发送POST请求): ```javascript import axios from 'axios'; const data = { name: 'John Doe', email: 'johndoe@example.com' }; axios.post('/api/user', data) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); ``` 上述代码中,我们使用Axios的`post`方法发送一个POST请求到`/api/user`端点,并传递一个包含用户信息的数据对象。 后端代码(使用Node.js和Express处理请求): ```javascript const express = require('express'); const bodyParser = require('body-parser'); const app = express(); app.use(bodyParser.json()); app.post('/api/user', (req, res) => { const { name, email } = req.body; // 在这里执行后端逻辑,比如保存用户数据到数据库等 // 返回成功响应 res.status(200).json({ message: 'User created successfully!' }); }); app.listen(3000, () => { console.log('Server is running on port 3000'); }); ``` 上述代码中,我们首先使用`body-parser`中间件来解析请求的JSON数据。然后,我们创建了一个POST路由处理程序,它接收来自前端的用户数据。在这个处理程序中,你可以根据实际需求执行后端逻辑,比如将用户数据保存到数据库中。最后,我们返回一个成功的JSON响应。 通过以上的前后端代码,我们实现了使用Axios进行前后端数据交互的简单案例。当前端发送POST请求时,后端将接收到请求并处理它,然后返回一个成功的响应。 希望这个案例对你有帮助!如果你有其他问题,请随时提问。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直在学习的小白~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值