6.24数组/对象相等比较,multer上传图片以及base64保存图片,mongo整理node小记,关于一级路由切换的过渡动画问题,nodejs报错Cannot set..分析,popup实例化小结

1、两数组或两对象 如何做相等比较
对象,顺序一致的情况下:JSON.stringify(obj)
数组,arr1.toString() == arr2.toString()

2、multer操作下的req.files的返回值

在这里插入图片描述
前端传base64格式的图片给后端。
后端如何保存为图片,引入他人博文内容。
在这里插入图片描述

https://segmentfault.com/a/1190000005364299 // 这是原文链接

3.1、mongoose 连接数据库
在这里插入图片描述
res.cookie操作
写入:res.cookie(name, value, {
path: ‘/’,
maxAge: 1000 * 60 *60
})
清理:res.clearCookie(name)或者res.cookie(name, ‘’)
读取:req.cookies.name

mongoose数组修改指定字段的值
在这里插入图片描述
mongoose分页以及排序
在这里插入图片描述
// priceLevel 是switch操作,得到查询条件params,再find数据进行筛选。较简单,故跳过。
在这里插入图片描述
此处又涉及exec结果回调,和save保存知识点。

exec个人理解就是不修改数据库的情况下。将结果集以回调形式返回,但是我觉得不用exec,直接返回修改过的goodsModel数据给前端应该也可以。前者可能更优雅点吧。
save是将数据保存,并同步到数据库。

注:定位符$像一个占位符,匹配第一个符合查询条件的值的位置。

mongoose删除数组内的对象操作
在这里插入图片描述
mongoose修改数组内的对象的值操作
在这里插入图片描述
mongoose修改无效的解决方案
Schema是否深度声明(即数组下的每一个对象的字段的类型)
是否doc.save()
是否遍历层级太多导致返回的item未指向真实地址链。
比如多个数组对象的嵌套,可能导致es6遍历函数的拷贝不是深度。
故得通过索引的形式赋值。如下案例:
在这里插入图片描述

4.1、express中间件的返回形式
res.send() ,与res.json()类似,但不支持undefind和null,无效json的转换。返回简单日期:res.send(new Date().toDateString())
res.json(),标准回应。
res.render(),可以用内部模板文件如html,渲染页面
send是express提供的简化函数,相当于setHeader+write+end

4.2、 axios.post可能会发送两次请求,第一次是options第二次才是post
在这里插入图片描述
解决方案一: 改为简单请求

// 增加axios.post的headers配置项
	headers: {
		"Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
	}

5、一级路由的动画切换问题
一级路由的切换比较特殊,以为它之上没有路由了,自身的过渡动画触发,如果只添加一个 v-enter-active或者v-leave-active,会使得进入的路由,或退后的路由不渲染。为display: none状态,如图。
(仅配置一个 enter-active,则离开的路由没有过渡时间,瞬间消失。)

在这里插入图片描述
所以,要想使一级路由动画,变得圆滑,必须规定2个状态 v-enter-active和v-leave-active。如效果图
(同时规定enter/leave active,若不想制造某一状态的动画,让那个状态为空即可。)
在这里插入图片描述

但是你还真别说,一级路由的好处就出来了。它可以控制2个页面的动画,某一程度上可以完成多种app复合滚动的操作。

6、nodejs报错分析
在这里插入图片描述
cannot set headers after …
这个报错大概是因为你的nodejs环境的某个接口未执行完毕。
即代码不够缜密,没有return。
在这里插入图片描述
对一些异常情况 勤于return 即可避免此类问题。

7、用的vue-create-api写弹窗组件。
当时想要一个需求,就是不断点击弹窗,弹窗重新加载。
弹窗show()后内部有计时器1.5s执行hide()
直接不断实例化弹窗,它并不会重新执行 show() 而是等hide()方法完成,才会去执行show()

当时我的思路就是每次实例化弹窗,就将弹窗dom销毁。用的this.$popup().remove()方法
效果有,但是回退到上级路由发现,报错。

经分析是弹窗在同一个组件,先remove()后并重新生成的话,弹窗指向的Vnode树下的Vue_id已经发生变化。故弹窗无法销毁。

后来才发现其实解法很简单,首先没必要销毁组件,销毁是库自动执行的。
其次,只要组件被实例化一次,那么props的传递,包括方法的执行,都类似于实例化,前提是组件display: none即hide()处于一个未激活状态。
然后props的传递需要20ms延迟。可以在组件内部设置setTimeout()去解决.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值