node.js接收上传图片,将图片信息写入数据库与解析form数据完成时向前台发送数据异步的问题
后台接收前台传来的form表单数据,数据为图片。用的是formidable这个插件,然后经过处理后写入数据库,在form.on('end')的时候,再把数据库的图片数据返回给前台,问题就出在这了,往数据库插入数据是异步的动作,form.on('end')的时候数据不一定插进去了,如果在插入成功的回调内发送数据,单图可以,多图因为循环,就会报错:can't set headers after they are sent
现在想到的解决办法是在form.on('end')内写个定时器,等一会再发送,可是这样不稳定,谁知道这段特定时间后,数据有没有插入完成呢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用 event (http://nodejs.cn/api/events.html)自定义事件并监听即可,数据库都操作完成再触发事件向前端传输数据。
异步编程的难度就在这些地方,一个动作的开始要依赖其他的动作完成作为标记。而你的逻辑就是:
res
返回数据所以流程上面看起来跟
form.on('end')
好像没有任何关系,为什么要在这个事件里面做操作?另外我不明白的一点是要返回给客户端的到底是什么,
latestFileData
?那Upload.find({}...)
查出来的又是什么?res.json
只能调用一次,如果你两者都想返回,那必须等结果都就绪后合成一个json再调用。类似的流程在NodeJS里面以后还会经常遇到,根本的解决方式是使用一些流程控制的库,我比较常用的有2个:
res.json
了;文档和习惯上面个人更喜欢前者。不管哪一个都会了
async/await
,这是最新的标准,也是以后的方向,建议早些了解。这个简单的,把异步转为同步