远山行小程序后端管理心得总结

简介: 远山行小程序后端管理心得总结

1.跨域


image.png

配置文件 重要的是devServer节点配置


module.exports = {
  pages: {
    index: {
      //入口
      entry: 'src/main.js',
    },
  },
  lintOnSave:false, //关闭语法检查
  //开启代理服务器(方式一)
  /* devServer: {
    proxy: 'http://localhost:5000'
  }, */
  //开启代理服务器(方式二)
  devServer: {
    proxy: {
      '/api': {
        target: 'http://127.0.0.1:7001',
        // pathRewrite:{'^/atguigu':''},
        // ws: true, //用于支持websocket
        // changeOrigin: true //用于控制请求头中的host值
      },
      '/demo': {
        target: 'http://localhost:5001',
        pathRewrite:{'^/demo':''},
        // ws: true, //用于支持websocket
        // changeOrigin: true //用于控制请求头中的host值
      }
    }
  }
}
这里有两个坑target: 'http://127.0.0.1:7001', 这个地址是药请求的
如果想跨域的话就自己请求自己的地址
axios.post('http://localhost:8080/api/admin/login', {
          'username': '19568269510',
          'password': '123456'
        })
大坑 如果请求自己的地址的话一定要看一下 自己的路由地址是localhost 还是127.0.0.1


2.设置登陆以后返回的token

     

window.sessionStorage.setItem('token', res.data.data.token)


3.设置请求的时候的请求头字段


// 配置请求拦截器 增加token
axios.interceptors.request.use((config) => {
  console.log(config);
  config.headers.Authorization=window.sessionStorage.getItem('token')
  return config
})


4.导航路由跳转判断卡顿逻辑函数


router.beforeEach(function (to, from, next) {
  // console.log(to);
  console.log(from);
  if (window.sessionStorage.getItem('token')) {
    next()
  } else {
    if(to.name=='login'){
      next()
    }else{
      next('/login')
    }
  }
})

导航菜单全部展开

图片跟表单信息一块上传

https://blog.csdn.net/qq_41875271/article/details/120179374?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_antiscanv2&utm_relevant_index=2


7.多文件上传获取文件的数组

handleRemove(file, fileList) {
                this.$message.error("删除成功!");
                this.ruleForm2.schoolLicence = []
                fileList.map(x => {
                    this.ruleForm2.schoolLicence.push(x.raw)
                })
            },


文件上传和删除 都写成这样 快速直接


!!!上传的是得到的文件的raw


:on-change//上传
:auto-upload="false"//关闭自动上传
:on-remove//删除


8.上传图片同表单


<el-form-item label="上传学校证件" prop="schoolLicence">
            <div class="shousuo">
                <el-upload action="uploadAction" list-type="picture-card" :on-preview="handlePictureCardPreview"
                    :on-remove="handleRemove" :show-file-list="true" name="img" ref="upload" :data="form"
                    accept="image/png,image/gif,image/jpg,image/jpeg" :headers="headers" :on-exceed="handleExceed"
                    :auto-upload="false" :on-error="uploadError" :before-upload="handleBeforeUpload"
                    :on-change="changeFile">
                    <i class="el-icon-plus"></i>
                </el-upload>
            </div>
        </el-form-item>

  data 定义

schoolLicence: [], //学校认证


表单规则给上 不让他为空(这个是自定义的)


handleBeforeUpload(file) {
                console.log('按钮', this.titleMap)
                if (!(file.type === 'image/png' || file.type === 'image/gif' || file.type === 'image/jpg' || file
                        .type ===
                        'image/jpeg')) {
                    this.$notify.warning({
                        title: '警告',
                        message: '请上传格式为image/png, image/gif, image/jpg, image/jpeg的图片'
                    })
                }
                let size = file.size / 1024 / 1024 / 2
                if (size > 2) {
                    this.$notify.warning({
                        title: '警告',
                        message: '图片大小必须小于2M'
                    })
                }
            },
            handleBeforeUpload(file) {
                console.log('按钮', this.titleMap)
                if (!(file.type === 'image/png' || file.type === 'image/gif' || file.type === 'image/jpg' || file
                        .type ===
                        'image/jpeg')) {
                    this.$notify.warning({
                        title: '警告',
                        message: '请上传格式为image/png, image/gif, image/jpg, image/jpeg的图片'
                    })
                }
                let size = file.size / 1024 / 1024 / 2
                if (size > 2) {
                    this.$notify.warning({
                        title: '警告',
                        message: '图片大小必须小于2M'
                    })
                }
            },
            //图片上传超过数量限制
            handleExceed(files, fileList) {
                this.$message.error("上传图片不能超过1张!");
            },
            // 删除上传学校证件的函数
            handleRemove(file, fileList) {
                this.$message.error("删除成功!");
                this.ruleForm2.schoolLicence = []
                fileList.map(x => {
                    this.ruleForm2.schoolLicence.push(x.raw)
                })
            },
            // 删除上传学校环境的函数
            handleRemoveschoolPic(file, fileList) {
                this.$message.error("删除成功!");
                this.ruleForm2.schoolPic = []
                fileList.map(x => {
                    this.ruleForm2.schoolPic.push(x.raw)
                })
            },
            // 图片上传失败时
            uploadError() {
                this.$message.error("图片上传失败!");
            },
            //预览图片
            handlePictureCardPreview(file) {
                this.dialogImageUrl = file.url;
                this.dialogVisible = true;
            },
            //文件改变时 on-change方法 ,fileList[0].raw 就是传给后端的值
            //filelist这个对象里面有很多属性,我们上传文件时,实际上传的是filelist列表中每一项的raw,只有raw可以正常上传, 获取到文件后,需要定义变量保存文件。所以需要获取filelist中的raw进行保存。
            //这里我用的formdata上传多文件,console打印formdata,文件在控制台中显示的格式为binary。
            changeFile(file, fileList) {
                this.ruleForm2.schoolLicence = []
                fileList.map(x => {
                    this.ruleForm2.schoolLicence.push(x.raw)
                })
            },


上传


uploadFileFun(formName) {
                console.log(this.uploadFiles);
                this.$refs[formName].validate((valid) => {
                    if (valid) {
                        let fd = new FormData();
                        fd.append('rname', this.ruleForm2.rname);
                        fd.append('rphone', this.ruleForm2.rphone);
                        fd.append('password', this.ruleForm2.password);
                        fd.append('bname', this.ruleForm2.bname);
                        fd.append('place', this.ruleForm2.place);
                        fd.append('around', this.ruleForm2.around);
                        fd.append('resource', this.ruleForm2.resource);
                        fd.append('representor', this.ruleForm2.representor);
                        fd.append('loginLicence', this.ruleForm2.uploadFiles[0]);
                        fd.append('licence', this.ruleForm2.uploadFiles[1]);
                        fd.append('function', this.ruleForm2.function);
                        let config = {
                            headers: {
                                'Content-Type': 'multipart/form-data'
                            }
                        }
                        // 根据goodsID判断是编辑提交还是新增提交,主要针对新增编辑使用同一个弹框
                        this.$http.post("/api/admin/bussiness/add", fd, config).then(res => {
                            console.log(res);
                            if (res.data.data.msg === "添加成功") {
                                this.dialogFormVisible = false
                                this.$message({
                                    message: '添加企业会员成功',
                                    type: 'success'
                                });
                                //新增完清空表单内容
                                setTimeout(() => {
                                    this.resetForm('ruleForm2')
                                }, 200)
                                this.reload()
                            } else {
                                this.$message.error('数据添加失败请联系管理员');
                            }
                        }).catch(res => {
                            console.log(res)
                        })
                    }
                })
            },

9.表单上传


10.JS 文件流和base64互转


// base64转文件流
base64toFile (dataurl, filename = 'file') {
    let arr = dataurl.split(',')
    let mime = arr[0].match(/:(.*?);/)[1]
    let suffix = mime.split('/')[1]
    let bstr = atob(arr[1])
    let n = bstr.length
    let u8arr = new Uint8Array(n)
    while (n--) {
        u8arr[n] = bstr.charCodeAt(n)
    }
    return new File([u8arr], `${filename}.${suffix}`, {
        type: mime
    })
},
// 文件流转base64
filetoBase64 (file) {
   let reader = new FileReader(); //实例化文件读取对象
    reader.readAsDataURL(file); //将文件读取为 DataURL,也就是base64编码
    reader.onload = (e)=> { //文件读取成功完成时触发
        let dataURL = e.target.result; //获得文件读取成功后的DataURL,也就是base64编码
        // console.log(dataURL);
    }
},
目录
相关文章
|
3月前
|
小程序 JavaScript Java
微信小程序的后端开发需要使用什么语言?
【8月更文挑战第22天】微信小程序的后端开发需要使用什么语言?
711 65
|
16天前
|
小程序 前端开发 算法
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的社区网格化管理平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的社区网格化管理平台附带文章源码部署视频讲解等
53 0
基于springboot+vue.js+uniapp小程序的社区网格化管理平台附带文章源码部署视频讲解等
|
2月前
|
小程序 PHP
微信小程序给 thinkphp后端发送请求出现错误 Wrong number of segments 问题的解决 【踩坑记录】
本文记录了微信小程序向ThinkPHP后端发送请求时出现"Wrong number of segments"错误的解决方法。问题原因是小程序请求header中的token变量名写错,导致token未正确传递至后端。作者提供了详细的检查步骤和建议,包括验证URL路径、参数规范和路由配置的匹配,以确保请求能正确发送和处理。
|
3月前
|
小程序 安全
Fiddler抓取小程序后端请求导入AppScan扫描快捷方法
【8月更文挑战第26天】这是一种利用 Fiddler 捕获小程序后端请求并导入 AppScan 进行安全扫描的方法。首先安装配置 Fiddler 并设置手机代理,通过 Fiddler 捕获请求;接着导出这些请求为 .saz 文件,并在 AppScan 中导入此文件,配置扫描参数后启动扫描以检测安全漏洞。操作时需确保有合法授权并遵循相关法规。尽管不同版本软件操作细节可能有所不同,但整体流程类似。
134 1
|
3月前
|
存储 运维 小程序
后端开发零负担!揭秘支付宝小程序云开发的高效与安全,你的项目也能飞速上线?
【8月更文挑战第27天】支付宝小程序云开发是由阿里云提供的集成开发环境,助力开发者高效、安全地构建小程序后端服务,免去服务器搭建,显著提高开发效率并降低运维成本。它集成了云函数、云数据库及云存储等功能,便于快速搭建后端逻辑。例如,仅需简单几行代码即可创建HTTP接口或进行数据管理。这使得开发者能更专注于业务逻辑和用户体验优化,同时平台还提供了强大的安全保障措施,确保数据安全和用户隐私。无论对于初创团队还是成熟企业,支付宝小程序云开发都能有效提升产品迭代速度和市场竞争力。
78 1
|
3月前
|
小程序 JavaScript Java
微信小程序+SpringBoot接入后台服务,接口数据来自后端
这篇文章介绍了如何将微信小程序与SpringBoot后端服务进行数据交互,包括后端接口的编写、小程序获取接口数据的方法,以及数据在小程序中的展示。同时,还涉及到了使用Vue搭建后台管理系统,方便数据的查看和管理。
微信小程序+SpringBoot接入后台服务,接口数据来自后端
|
3月前
|
移动开发 开发框架 小程序
开发H5程序或者小程序的时候,后端Web API项目在IISExpress调试中使用IP地址,便于开发调试
开发H5程序或者小程序的时候,后端Web API项目在IISExpress调试中使用IP地址,便于开发调试
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的学生毕业管理小程序附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的学生毕业管理小程序附带文章源码部署视频讲解等
37 1
|
4月前
|
小程序 PHP
全新UI自助图文打印系统小程序源码 PHP后端 附教程
全新UI自助图文打印系统小程序源码 PHP后端 附教程
274 2