记一些踩过的坑

记一些踩过的坑

黄鹏宇 970 2022-07-31

一些坑

1. 获取IP时,出现127.0.0.1

在nginx上带上头

    location ~ 
    {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass_header Set-Cookie;
        proxy_pass_header P3P;
        proxy_pass http://127.0.0.1:8090;
    }   

2. 异步任务等待回调时,会导致前端超时

解决方案:

  • 让前端等待时间长一点
  • 弄成两个接口,一个发送,一个查询状态
  • 异步任务不管结果

3. 身份证的输入框,不能是number

因为身份证后面有可能出现x

4. 数据库都是小写

windows下大小写不敏感,但linux敏感

5. redis客户端,使用后记得close

6. 退出登录后,axios的header使用的token,不刷新

axios.defaults.headers['Authorization'] = ""

7. Mybatis的if标签判断空字符串 == 0,参数为0时会自动转为空字符串

    <if test="goodsStatus!=null and goodsStatus!=''">
           and goods_status = #{goodsStatus}
   </if> 

解决办法
1.当传入的参数有0时,只判断!=null即可。
2.将0转化为String类型,就可以解决这个问题。

8. 传参时,遇到 was expecting double-quote to start field name

请检查最后是否有多余的逗号
image-1659704281078

9. 设计数据库时,表和表之间的关联字段,最好用主键…

比如 用户表主键为id,但拥有同样是唯一的openid字段,
那么用户收藏的单词表,最好记录user_id,而不是user_openid…
这样方便后期扩展功能

10. pageHelper

sql语句末尾不要带分号

11. js循环字符串

超过两位数,会有bug?
本质上是做比较时候的bug

错误场景:

let start = 9
let end = 10
let bug_start = "9"
let bug_end = "10"
for (let i = start; i <= end; i++) {
    console.log(i)
}

本质:

let start = "8"
let end = "9"
let bug_start = "9"
let bug_end = "10"
console.log(start<=end)
console.log(bug_start<=bug_end)

true , false

两个字符串数字做比较为ASCII码比较,依次取每个字符,字符转为ASCII码进行比较:‘5’>‘123’ ==>true

12. vue filter时要注意null

13. mybatis order by失效

select * from pic order by #{sortValue}
会被解析成: select * from pic order by "view_count" ,带了双引号,所以失效了,但是可以防sql注入,解决办法是改成${xxx},但需要控制这个变量。

14. quill加载模块得等到ready以后才行

<QuillEditor @ready="onReady" :modules="modules" />

const modules = ref([])

const onReady = () => {
  modules.value = [
    {
      name: 'blotFormatter',
      module: BlotFormatter,
    },
  ];
}

15. 线上和测试环境切换时,出现的缓存问题

A4本地测试时,刷新了缓存,但是线上没有,线上的缓存还是旧的,所以会导致数据不一致

16. new Date().toLocaleTimeString()

该时间的格式为宿主环境的当前区域设置中的缺省格式。因为返回值可能随计算机的不同而不同,所以脚本编写过程中不能依赖此方法的返回值。toLocalTimeString 方法应该仅仅用于格式化显示 – 而绝不要作为计算的一部分。

17. meilisearch filter包含inf 或 infinity

会报错
image-1669534318610
查看 issues

18. 配置jackson的ObjectMapper时

要小心全局设置会污染其他地方

19. spring的yml中配置redis的index

spring:
  redis:
    database: 2

这样配置以后,在redis中,应该是select 1

20. 小程序的iOS不支持webp格式的图片

preview接口中可以访问,但是<image src=""/>不支持

21. mysql中,用 IN 查询,会变成没有顺序

``select id from pic where id IN (32,20,22,31,19,19)```
image-1687761443294

22. vue和flask中的渲染变量的语法冲突

app.jinja_env.variable_end_string = '}}}'

23. uni-app引入Vant的dropdown选择过后面item后,再选择前边的选项出现点击无效

image-1689209578560

选完1,再选2,则选不了了。
找到 wxcomponents/vant-weapp/dropdown-item/index.wxml打开后找到after-enter和after-leave这两个事件,并改为驼峰命名:afterEnter和afterLeave即可!有遇到问题的小伙伴可以去试一试,看下是否能够解决!

原文链接:https://blog.csdn.net/qq_33839972/article/details/129771051

24. mysql 8 order by limit问题

如果order by 的字段,出现重复时,加不加limit offset对结果有影响

select t.ERID from xxx order by t.create_time LIMIT 0, 10;
select t.ERID from xxx  order by t.create_time LIMIT 10, 10;

这两条会有重复数据

MySQL官方描述: 如果多行在列中具有相同的值ORDER BY,服务器可以自由地以任何顺序返回这些行,并且可能会根据整体执行计划以不同的方式返回。换句话说,这些行的排序顺序相对于未排序的列是不确定的。
影响执行计划的一个因素是 LIMIT,因此ORDER BY 有和没有的查询LIMIT可能会以不同的顺序返回行。

25. SpringSecurity anonymous和permitAll的区别

.antMatchers(“/login”, “/register”, “/captchaImage”).anonymous

anonymous的意思是,仅能匿名访问

26. updateAppMessageShareData

微信的更新分享内容,必须从公众号中打开才行

27. 在Aop中只能抛出的异常必须继承RunTimeException或其子类

28. 元素值必须为常量表达式

检查int 和 Integer之类的

29. wx.navigation url传参 字数限制

19. mysql timestamp的最大值为2039?