在线axios(在线测网速)
JeeCGBoot低代码开发平台,强大的代码生成器前后端一起生成
今日推荐:JeeCGBoot低代码开发平台
推荐理由:
1、前后端实现分离架构,通过API调用,实现架构解耦
2、项目集成SpringBoot、SpringCloud的Spring全家桶
3、在线实现开发,表单开发设计、报表配置、在线图表设计、在线设计流程、流程自动化、插件能力等
4、系统集成了工作流,实现扩展任务接口。
5、解决java项目的70%的重复工作
6、最重要的是技术售后的完善,有完善的开发文档,常见问题,交流群
适用场景
1、内部办公系统OA
2、企业资源计划系统ERP
3、客户关系管理系统CRM
4、企业信息管理系统
5、电商SAAS系统
功能特色:
1、支持微服务SpringCloudAlibab全家桶
2、前后端高效代码生成器,单表,一对多模型,CRUD等功能一键生成
3、低代码图表功能,在线设计图表无需编码,实现曲线图,柱状图,数据报表等自定义排版布局
4、封装各种工具类,如定时任务,短信接口邮件发送,excel导入,文件上传下载等
5、支持查询过滤器,动态拼装SQL追加查询条件
6、实现数据权限,控制到行级,列表级,表单字段级,实现不同人看不同数据
7、支持SAAS服务模式,提供多租户的架构方案
8、数据库兼容主流Mysql、PostgreSql、Oracle、SQLServer、MariaDB等主流数据库,一套代码兼容主流
9、集成了Activiti工作流
10、支持单点登录CAS集成方案
11、接口统一采用restful接口方式,集成了Swagger-ui在线接口文档
技术架构:
后台环境:
Java8+Maven+Mysql+Redis
后台开发技术
springBoot2+SpringCloudAlibaba+MybatisPlus+Jimurport+ApacheShir
前端:
Vue2.6+Axios
微服务架构图:
后台操作图:
支持手机端
Nginx无法获取带下划线的请求头数据问题
今天在开发中有这样一个请求:前端需要在http请求中携带参数,后端获取参数进行解析并进行后续操作。
前后端分离
前端:Nuxt + axios
后端:Springboot + dubbo
在线下环境进行测试的时候一切都是可以的,但是部署到线上环境却发现无法获取请求头中的参数信息
① 从代码版本来看,线上和线下都是一致
② 运行环境一致
③ 除新功能外,项目其他部分运行正常
以一个数据查询的功能为切入点,进行接口调试然后发现:
能正常获取请求头中的参数!
① 线下是本地运行,连接测试库
② 线上是云服务器运行,连接正式库
③ 线上有使用到Nginx反向代理
首先线上接口是OK,调试也正正常通。那么很大可能是前后端联调出的问题。于是我又运行本地的前端项目联调线上接口发现也是不行的。
到这里的话,问题已经很清晰了:线上项目有经过Nginx进行反向代理,那大概率就是Nginx这个环节出现问题了。
① 从Nginx日志中发现如下:
到这里已经很明确了,就是Nginx不能识别请求头中的access_token
② 网上查询相关资料
Nginx中关于: underscores_in_headers on;
的配置是默认关闭的,于是不能识别到accessToken
在server模块中配置: underscores_in_headers on;
access_token 修改为 accessToken
另外记录下遇到的其他问题:
① Dubbo中不能序列化HttpServletRequest,需要再消费者的业务实现类中进行数据获取,然后传递给生产者。
没有什么技术含量,流水账罢了...
Elementui 在线获取表格数据
!DOCTYPE?html
html
head
????meta?charset="utf-8"
????meta?http-equiv="X-UA-Compatible"?content="IE=edge"
????title用户信息页/title
????link?rel="stylesheet"?href=""
????link?rel="stylesheet"?href=""
/head
body
div?id="app"
????el-table?ref="testTable"?:data="tableData"?style="width:45%"?border
????????el-table-column?fixed?prop="id"?label="ID"?width="80"/el-table-column
????????el-table-column?fixed?prop="username"?label="用户名称"?width="120"/el-table-column
????????el-table-column?prop="post"?label="角色"?width="120"/el-table-column
????????el-table-column?prop="department_name"?label="部门"?width="120"/el-table-column
????????el-table-column?prop="post_name"?label="岗位"?width="120"/el-table-column
????????el-table-column?prop="top"?label="直属上级"?width="120"/el-table-column
????????el-table-column?prop="other_department"?label="附属部门"?width="120"/el-table-column
????????el-table-column?prop="last_login_time"?label="最后登录时间"?width="180"{{$moment().format('YYYY-MM-DD?HH:mm:ss')}}
????????/el-table-column
????/el-table
????div
????????el-pagination
????????????????@size-change="handleSizeChange"
????????????????@current-change="handleCurrentChange"
????????????????:current-page="currentPage"
????????????????:page-sizes="[10,?20,?30,?40]"
????????????????:page-size="10"
????????????????layout="total,?sizes,?prev,?pager,?next,?jumper"
????????????????:total="Number(totalCount)"
????????/el-pagination
????/div
/div
/body
!--?vue.js放在index.js前面?--
script?src="../js/vue.min.js"/script
script?src=""/script
script?src="../js/axios.min.js"/script
script?src="../js/moment.main.js"/script
script?type="text/javascript"
????Vue.prototype.$moment?=?moment
????Vue.prototype.$http?=?axios
????var?vue?=?new?Vue({
????????el:?'#app',
????????data:?{
????????????//表格当前页数据
????????????tableData:?[],
????????????//默认每页数据量
????????????pagesize:?10,
????????????//当前页码
????????????currentPage:?1,
????????????//默认数据总数
????????????totalCount:?0,
????????????//url参数
????????????urlParams:?{
????????????????page:?1,
????????????????limit:?10,
????????????},
????????},
????????computed:?{
????????????getQueryString:?function?()?{
????????????????let?QueryString?=?'';
????????????????for?(var?i?in?this.urlParams)?{
????????????????????QueryString?+=?i?+?"="?+?this.urlParams[i]?+?"";
????????????????????console.log(i);
????????????????????console.log(i,this.urlParams[i]);
????????????????}
????????????????console.log(QueryString);
????????????????return?QueryString.slice(0,?-1);
????????????},
????????},
????????methods:?{
????????????//从服务器读取数据
????????????loadData:?function?()?{
????????????????let?_this?=?this
????????????????this.$http.get('?'?+?this.getQueryString).then(function?(res)?{
????????????????????console.log(res.data);
????????????????????if?(res.data.code?==?0)?{
????????????????????????_this.tableData?=?res.data.data;
????????????????????????_this.totalCount?=?res.data.count;
????????????????????}?else?{
????????????????????????return;
????????????????????}
????????????????})
????????????????????.catch(err?=?{
????????????????????????console.log(err);
????????????????????});
????????????},
????????????//每页显示数据量变更
????????????handleSizeChange:?function?(val)?{
????????????????this.urlParams.limit?=?val;
????????????????this.loadData();
????????????},
????????????//页码变更
????????????handleCurrentChange:?function?(val)?{
????????????????this.urlParams.page?=?val;
????????????????this.loadData();
????????????},
????????},
????????created()?{
????????????this.loadData();
????????},
????});
/script
/html