2021年11月17日

参与项目 速搭零代码项目
是否协助解决
协助解决人 齐继超
整体耗时 3小时

工作重点

  1. 获得后端返回值,渲染到页面上

遇到的问题和解决思路

遇到的问题:

后端返回报错信息,前端接收不到。

最后问题解决:

请求拦截器在封装接口的js中,在js中可以找到axios然后再找service.interceptors.response看response => {}中的判断return出来的值

问题解决过程:

第一步:找到调用接口的地方,了解到该接口是通过vuex中的store中的dispatch方法封装

  1. this.$store.dispatch(_registerUrl, params)

_registerUrl在上面有定义,并且赋值:

  1. if(this.isFoura){
  2. params.fouraCode = this.logonForm.fouraCode;
  3. _registerUrl = 'user/register'
  4. }else{
  5. params.oa = this.logonForm.oa;
  6. _registerUrl = 'user/registerOA'
  7. }

可以得到_registerUrl = ‘user/registerOA’ 或 ‘user/register’
第二步:找到接口封装的上一级
1.首先找到store文件夹,找到user.js,在js文件中找到registerOA和register方法
image.png

  1. // register login
  2. registerOA({ commit }, params) {
  3. return new Promise((resolve, reject) => {
  4. auditRegisterPermission(params)
  5. .then(response => {
  6. const { data } = response;
  7. console.log('data:', data);
  8. commit('SET_TOKEN', data);
  9. setToken(data);
  10. resolve(response);
  11. })
  12. .catch(error => {
  13. reject(error);
  14. });
  15. });
  16. },
  17. // register login
  18. register({ commit }, params) {
  19. return new Promise((resolve, reject) => {
  20. registerPermission(params)
  21. .then(response => {
  22. const { data } = response;
  23. console.log('data:', data);
  24. commit('SET_TOKEN', data);
  25. setToken(data);
  26. resolve(response);
  27. })
  28. .catch(error => {
  29. reject(error);
  30. });
  31. });
  32. },

2.通过以上代码可以找到auditRegisterPermission和registerPermission

  1. import {
  2. loginPermission,
  3. registerPermission,
  4. auditRegisterPermission,
  5. getInfoPermission,
  6. logout,
  7. } from '@/api/user';

3.通过以上代码可以找到api文件夹下user.js文件,从中找到registerPermission、auditRegisterPermission

  1. export function registerPermission(data) {
  2. return request({
  3. url: '/fsp-lowcode-client/login/register',
  4. method: 'post',
  5. headers: {
  6. 'fsp-session': 'fsp',
  7. },
  8. data,
  9. });
  10. }
  11. export function auditRegisterPermission(data) {
  12. return request({
  13. url: '/fsp-lowcode-client/login/auditRegister',
  14. method: 'post',
  15. headers: {
  16. 'fsp-session': 'fsp',
  17. },
  18. data,
  19. });
  20. }

4.通过以上代码得到接口封装在request中

  1. import request from '@/utils/request';

5.找到utils文件夹下request.js文件,在其中就能找到请求拦截器所做的操作

  1. // response interceptor
  2. service.interceptors.response.use(
  3. /**
  4. * If you want to get http information such as headers or status
  5. 如果你想获取http信息,比如headers或者status
  6. * Please return response => response
  7. 请返回响应 => 响应
  8. */
  9. /**
  10. * Determine the request status by custom code
  11. 通过自定义代码判断请求状态
  12. * Here is just an example
  13. 这里只是一个例子
  14. * You can also judge the status by HTTP Status Code
  15. 也可以通过 HTTP 状态码来判断状态
  16. */
  17. response => {
  18. const res = response.data;
  19. //console.log("res",res);
  20. // 修改校验会话超时的逻辑,移除内部的错误判断
  21. if (res.code == 1 || res.retCode == 200 || res.code == 200 || res.code == '200' || res.retCode == 0 || res.code == 0) {
  22. if (response.request.responseURL.indexOf('/auth/authentication') > -1 || response.request.responseURL.indexOf('/org/queryAllOrg') > -1) {
  23. res.data = JSON.parse(Decrypt(res.data));
  24. }
  25. return res;
  26. } else if (res.retCode === 2001 || res.retCode === 2002) {
  27. console.log(router.history.current.path);
  28. Message({
  29. message: res.retMessage || 'Error',
  30. type: 'error',
  31. duration: 5 * 1000
  32. });
  33. return res;
  34. } else if (res.code === 70001) {
  35. // 没有权限访问此应用
  36. window.location.href = '/#/404';
  37. } else if (res.retCode === 5109) {
  38. // odp帐号未绑定
  39. console.log('cdscd');
  40. return res;
  41. } else {
  42. //加上了此代码
  43. return res;
  44. }
  45. },

个人总结

对vuex不够了解,没有一步一步的找到最后的js文件。
对请求拦截器也不够了解,没有看懂其中的逻辑。[

](https://cn.vuejs.org/v2/api/?#Vue-nextTick)