post返回数据过大导致响应超时有什么好的办法(终于搞定)
发布于 8 年前 作者 hfqf 13457 次浏览 来自 问答

** / * 查询所有记录 **/ router.post(’/queryAll’,function (req, res, next) { var conditions = {owner:req.body.owner}; Repair.find(conditions,function (err,ret) { if(err){ return res.send(global.retFormate(0,err,‘查询数据失败’)); } else { return res.send(global.retFormate(1,ret,‘查询数据成功’)); } });

    }),****

这个接口在数据很少时一切正常,现在达到一百多时就无响应了 ,不知道原因, 谢谢!

附上db: untitled1.png

附上接口调用时长(应该是repair/queryAll超时,本地数据被改过了,两者现象都是一样的): untitled1.png

折腾了几天终于好了:将mongoose由4.1.2升级到了4.7.7,也是试试的,居然好了,好坑,还是不知道之前为什么不行的原因,算了,先这样吧。 untitled1.png

23 回复

@hfqf post数据是什么,这么大

@DevinXian 用户每次换设备后登录需要同步数据,联系人,维修记录,成百上千的。

如果过长时间响应代理nginx超时加长,或者文件过大断点续传支持下?

@ntfs32 谢谢 我是小白 先查查相关概念 理理思路

@hfqf 考虑一下优化业务流程吧,如果不是经常换手机,可以使用下载sqlite数据库文件的方式,如果是经常换,可以分步下载,先下载必须的,再由用户操作决定下一步要同步的数据等等

@SHocker-Yu 你说的这个好像是用于请求的数据的吧 我那个是返回数据太长而没有任何相应的问题

用nodejs中的流的,或者分成一下小块一小块数据,连环请求。

@hfqf 额,看成post传数据太大了

得由多大哦;json 数据,可以想办法分成多个post 请求传过去; 重新设计返回json的数据

@winglight 确实不是经常需要换手机,但是分布下载体验不太好吧,可能数据会很多。到底能不能一次返回所有数据呢,这个问题大家应该都会遇到过的吧。

@2015-lizaiyang 用流的话 我想到了 但是还不知道具体该如何写 连环请求肯定是可以的 但是觉得用户体验不是太好 登录后可能等好久才能刷新页面 。我现在很是疑问:到底能不能一次返回所有数据呢,这个问题大家应该都会遇到过的吧。

<p style=“text-align:right”><a href=“https://github.com/lumia2046/cnode”> — — 来自lumia2046-react-cnode</a></p>

@slclub 多个请求肯定是可以的 但是觉得用户体验不是太好 登录后可能等好久才能刷新页面 。我现在很是疑问:到底能不能一次返回所有数据呢,这个问题大家应该都会遇到过的吧。

@lumia2046 兄台 你这是什么意思

@SHocker-Yu 没关系 也要谢谢你热心

@hfqf 您这个只能用node中的流,会比较好,不然就是把数据切成小块,分步交互,不然,用户的网络如果太慢,那就尴尬了。

@2015-lizaiyang 用流去做,我可以去了解,查资料。但是这个post返回数据到底有没有限制,还是只是express它自己做了限制,还是中间件做了限制,这个很关键,不知道你知不知道,再次感谢。

折腾了几天终于好了:将mongoose由4.1.2升级到了4.7.7,也是试试的,居然好了,好坑,还是不知道之前为什么不行的原因,算了,先这样吧。

untitled1.png

@hfqf 一直以为你的问题出在web层,结果是数据库连接的问题啊,一般定位这种问题都是要先排除一下db查询的问题了,类似执行计划这种

@winglight 新人自学自搞的项目 很多地方不懂 只能一点一点的啃

@hfqf 初学要从套路开始~~~

回到顶部