小编自己给自己捣鼓了个服务器,通过ngnix代理node,实现基本的增删改查!可能是第一次搞用node+mongoose,又野心太大,想要一步做到完美,遇到了一大堆问题!归根到底是小编的熟练度不够,熟能生巧不是说说的,同时也感谢帮助我的大神们!
由于没有日志系统,不能很好的定位问题在哪里,只能通过脑补和不断线上替换修改后的文件,来确定问题发生的位置!有空还是要把日志系统装起来!
遇到的问题有以下几个方面:
第一,数据库插入不了数据,通过大神指导,明白了node和mongoose操作数据库必须通过async和await,模拟promise,通过大神指导和反复尝试,在正确的地方加上了async和await。
第二,因为对mongoose的api不熟悉,导致卡了好长时间。mongoose中返回query是返回相关数据,query可以是对象,数字,长度等!其他的返回文档手册中也有介绍!
第三,深入了解了await,消化大神理解,加上个人理解,async和await是难兄难弟,必须同时出现,async声明异步函数,await可以有多个,await后面如果是promise对象,则返回promise对象的resolve()的值,也就是说你不必再使用then。这个时候小编纠结了,reject如何得到,最后通过try catch来解决这个问题。node中很多地方要用try catch,来处理和捕获异常!当然await后面也可以写不是promise的内容,一样返回!中间遇到一个很大的坑,代码如下:
mongoose中的回掉函数是不能使用async的,因为前面的await接受一个promise对象,所以里面回掉函数就不能用async,用了也无法触发指定效果,也就是只有return的情况下才能使用async和await,遇到这类情况,我们可以通过切换api来实现:
上图用了try catch,来实现了返回特定的数据,注意,这种写法的this.create传入必须的数组。,当然也可以手动构建一个promise对象来实现,比上面这种方法复杂一点!
这段是替代 try catch方法的,用一个新的promise对象,await会等待promise对象创建执行,并返回promise对象,这样回掉就可以用了!
领取专属 10元无门槛券
私享最新 技术干货