大型乌龙狗血剧之反斜杠

1 问题代码

请看下面的代码,你觉得会输出啥呢?

let a = 'public_uploads_1631175317736.png';
let arr = [
    {site:"public_uploads_1631175317736.png"},
    {site:"public_uploads_1631175317736.png"},
]
let b = "\";
​
arr.forEach(item => {
    let str = item.site.replace(/_/g,b)
    console.log("str:",str)
    item.site = str
})
​
console.log("a:",a.replace(/_/g,b)); 
console.log("arr:",arr)
复制代码

讲述事情经过,听听我的故事吧,哭!

2 事情经过

自己写代码的时候,想要在服务器上边保存用户上传的头像,然后一查一问发现,在数据库中保存图片路径比较多,然后我就一顿操作,在前端使用 Antd 的 uploads 组件上传,因为是自己写着玩,所以用的 Node 写服务端,用了一个 multer 中间件来保存图片,然后能够得到保存的路径 像 public\uploads\1631175317736.png,因为我电脑是 Windows 系统,所以可以看到路径分隔符使用的是反斜杠 “\”。

然后我就想把它存数据库里面啊!结果发现因为反斜杠是转义符的缘故,数据库会把它吞了。然后我又边查边问,最后是使用下划线代替反斜杠存到数据库,用的时候我再转回来,所以数据库里面存的是这样的 public_uploads_1631175317736.png

然后我就开始要用了,虽然这样麻烦一点,但第一次嘛,先把功能写出来再说,我这样安慰自己,结果就遇到上边的问题了。字符串中测试转义的好好的,遍历给赋值给对象就不转了,为此我还特地试了 map for 等。结果发现循环遍历赋值给对象的时候它就是不转义。甚至你如果有测试上边的代码你就可以看到, str 显示都是一个反斜杆,赋值给 item.site 显示就是两个反斜杠了,这这这还能更加离谱一些嘛?我一度怀疑自己是不是发现了 VScode 的 bug。然后我就厚颜无耻的在群里问了起来,显然大家都没有遇到过这样憨批的问题。 然后整个晚上我在图书馆就是盯着这段代码发愁,反复测试,修修改改,毫无进展。时间一晃就要到图书馆关门了,心想一晚上不能白待,我又厚颜无耻的加上群里一个简单回复过刚刚那个问题的老哥,虚心请教,老哥一顿操作猛如虎,然后告诉我说,将数据返回给客户端显示的就只有一个反斜杠了,我试了试,发现果然如此,真感动了啊!连忙道谢,心情大好。这是另一个群里的老哥也回复说可能时终端显示的问题,让我试试 node xxx.js >> a.txt ,我一试,好吧,还是和终端显示的结果一样。但我最终得出的结论也差不多,我觉得就是显示的问题。于是我回到宿舍开心的继续写下面的代码。

好吧,本剧的惊天大逆转来了,我忽然的发现,虽然 Windows 系统文件地址分隔符使用反斜杠 “\”,但是写代码分割文件地址是用斜杠 “/” 啊!也就是说一开始存数据库里面的时候,我直接用斜杠替换掉反斜杠就好了。也就不会有后面的问题了。我真的,脑血栓都要给气出来了!

真的,把我最好的祝福送给大家,希望大家写代码信手拈来,畅通无阻,一泻千里!

3 补充截图

结尾附上测试结果截图

终端:

image-20210912161822535.png

输出到文件中:

image-20210912161924037.png

发送给客户端:

image-20210912162144061.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享