遇到一个很诡异的 bug,关于 routes 的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
pupboss

遇到一个很诡异的 bug,关于 routes 的

  •  
  •   pupboss Mar 14, 2016 3323 views
    This topic created in 3703 days ago, the information mentioned may be changed or developed.

    用的 express

    项目结构是这么回事,其实就是个模拟登录:

    • agent
      • dom_agent.js

    传入 url ,账户,密码三个参数,来获取 html

    • parser
      • a.js
      • b.js

    传入 url ,账户,密码三个参数,转发给 dom_agent.js ,然后解析各个类型的 html ,并且按照定义好的格式返回字典( JSON )

    • routes
      • a.js
      • b.js

    var router = express.Router(); router.get 来定义路由,转发请求给 parser ,

    很诡异的问题就是,明明请求的 a 路由, parser a 打印出来的 url 也是正确的,最后返回的数据格式也是正确的,就是数据不对,数据是另外一个网址的

    这还不是最诡异的,最诡异的是,低频率测试的时候,都是没问题的(比如上线前的本地测试),一到生产环境,如果持续请求一个 url ,过不了几次,返回的数据就变成了其余 url 的,而且不固定,不固定啊不固定,不固定啊不固定

    数据格式对,就是内容完全混乱

    已经排查过的有:

    开始我以为是没有 return 掉,所以接着执行了,哪个快就返回哪个,所以

    • 每个 callback ,前面都加上 return

    但是发现没用,再一想,根本不是哪个快就返回哪个,因为数据格式是对的,请求的肯定是对应的路由,所以才能发给对应的 parser ,并没有往下执行

    然后我怀疑是模块的缓存,查查资料,说 Node.js 的模块缓存是用来提高加载速度,貌似没关系

    再有可能就是传入的参数,也就是那个 url 参数,被缓存了,但是貌似也不对,因为帐号密码没缓存(并没有发现返回其余用户的数据,只是返回自己其余 url 的数据)

    也可能跟代码风格有关,我现在写法是

    • 每个文件第一行都 'use strict';
    • 每个 callback 前都加上 return
    • 每个 res.xx 前都加上 return
    • 几乎所有情况都是用的单引号
    • 貌似是没了,有的话再补充
    Supplement 1    Mar 14, 2016
    我已经解决这个问题了,在 dom_agent.js 里面

    是全局变量的问题, target 变量不小心搞成全局的了,导致每个用户都会修改这个参数,所以也就导致了刚才的诡异
    pupboss
        1
    pupboss  
    OP
       Mar 14, 2016
    对了还要补充几个问题,每个 parser ,里面的方法名,是一样的,不知道这样会不会有影响
    klesh
        2
    klesh  
       Mar 14, 2016
    感觉是 dom_agent.js 的问题,这个是不是一个类?每次有 new 吗?
    AccIdent
        3
    AccIdent  
       Mar 14, 2016
    能把代码贴出来看下么?
    pupboss
        4
    pupboss  
    OP
       Mar 14, 2016
    @AccIdent 贴出来略多。。怕大家懒得看嘛,就自己总结了下问题,项目在 GitHub 上放着呢~

    @klesh 对!!我已经解决这个问题了,就是在 dom_agent.js 里面

    是全局变量的问题, target 变量不小心搞成全局的了,导致每个用户都会修改这个参数,所以也就导致了刚才的诡异
    About     Help     Advertise     Blog     API     FAQ     Solana     2722 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 41ms UTC 13:20 PVG 21:20 LAX 06:20 JFK 09:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86