神奇:之前写好的许多接口返回了一些无关的数据
发布于 8 年前 作者 JarvisQJ 4756 次浏览 来自 问答

untitled1.png 红线之前是正常内容,之后是数据库里其他内容,本接口根本没有指定返回这些

25 回复

看一下你的查询字段规定了没有,可能是之前后面这些参数没有值,现在有值了就可以查出来了

.find({查询条件},{查询字段})

@nnliang 红线后面的数据不是指定返回的,之前的都是指定的。这是个神奇的bug,神奇之处就在于,我根本没让它返回,应该所有开发人员都懂的

有没有用过第三方的一些orm,或者elasticsearch之类的,有的默认的给你返回了一个model 之类的

@qujinxiong 方便的话可以贴出来你指定查询的代码片段么

感觉还是要仔细审查代码,一步步跟进 多找找自身原因。

@nnliang 真没必要贴代码,因为许多接口都是有这个。这些接口都是之前开发好没有任何问题的。突然就莫名其妙的,多了这后面这一堆。

@qujinxiong 红线后面这么一堆,和接口本身没有一点关系

@doerU 你知道,有些bug会让你怀疑一切

除非你更新了什么东西

来自酷炫的 CNodeMD

我想问,你是不是用了框架,比如thinkjs? 它的success ,fail 方法会自动输出这些参数的。

仔细排查一下,有些bug也会让你意想不到

npm惹的鬼吧,仔细排查npm 相关的module吧 From Noder

@dbit-xia 因为是多个人开发的,没有人知道为什么。我只希望有人遇到过这种情况

@airyland 应该不是这种情况,因为返回的数据是我数据库中的一个集合里面的

经验告诉我,从来都没有什么神奇的事情,肯定是哪个糊涂蛋写错了

程序是不会骗人的! CTO经常说的一句话

res.render(“channelHomepage”,utils.combineJson(errors.e0,channel[0])); 最终解决方式:上面的errors.e0和channel[0]如果互换了位置就会出现之前的bug。combineJson是我写的一个拼接json的工具方法。虽然没有找到根本原因,但我觉得这应该算mongoose或者mongodb的一个bug。因为上面的代码执行过一次后,其返回的内容会被加入到所有其他接口返回的结果中

虽说utils.combineJson是我自己写的工具方法,但它的功能仅仅是拼接json而已。

@qujinxiong 是不是在 combineJson 里用了 Object.assign?把 combineJson 里的代码贴出来看下

@zbinlin exports.combineJson = function (origin, target) { for (var p in origin) { target[p] = origin[p]; } return target; };

@qujinxiong 你这样写太危险了,如果 origin 原型链上有数据,很容易把原型链上的数据赋值给 target。

你用 这个试试 function (origin, target) { var result = {}; for (var p in origin) { result[p] = origin[p]; } for (var p in target) { result[p] = target[p]; } return result; };

@zbinlin 正解!!!!!!!

@mabu233 非常感谢,确实是我写的工具方法有问题

回到顶部