这个Bug是昨天晚上遇到,去SF社区提了出来,估计是太晚了,没人回答,今天早上两个回答。
第一个人回答主要是解决双重回调,也怪我,我刚开始也以为是双重回调的问题,因为最近看的网上资料全是Promise和async/await解决回调问题。我想我真不会遇到了?其实不是。
第二个大佬认真看了我贴的代码,然后一步步在评论区里沟通,最后说到了为什么css和头像文件会在请求req里出现,估计是我的静态化问题。然后我就把注意力转过来了,去看user.ejs,上来就发现了一个问题,我静态路由是app.use("/avatar",express.static("./avatar"));,在ejs里面传参还是要加上avatar这个虚拟路径的,我没加。 =-=,然后css和js脚本都是在public的,我直接静态app.use(express.static("./public"));,这个意思就是当用户不管访问你这个网站的什么东西,页面,资源,接口等等,都会优先从你的本地的public文件夹里先找,找的话就展示,找不到就继续走下面的路由,所以这个前面就不用加虚拟路径了,可是运行还是报那个错误,avatar undfined,这位大佬也提到了我req里为什么会有css请求啊,然后去看了public,我把jumbotron.css是放在css文件外面,静态化之后相当于在根目录,因为这个css里就放了body的两个样式,当时没多想放在直接放在public里,没有跟public的css文件放在一起,然后我又去看了ejs里这个css的外联,只有这一个css文件发生了请求,那么这个css的静态化是失败的,,我老老实实把这个css放在css文件夹,改成了,Bug解决,拍手。。。=-=
估计是我一开始就在public下放着,所以我就直接"/",可能是有的链接写成是"/css"了。虽然不是什么高深的bug,但是仅从Node的这一点报错信息,也还是需要慢慢来排查。