V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
muru
V2EX  ›  Node.js

调用一个 nodeapi 始终没有返回对象

  •  
  •   muru · 2016-05-16 15:24:57 +08:00 · 2693 次点击
    这是一个创建于 2904 天前的主题,其中的信息可能已经有所发展或是发生改变。

    来实现页面截屏功能,为了避免重复截屏就加入了锁。不知道是哪个环节有问题,求大牛看看。。

    router.post('/shot', function(req, res) {
      var token = req.param('token'); 
      var url = req.param('url', false);
    
      debug('url : ' + url);
      if (!url) { res.send('must with url') }
      url = decodeURIComponent(url);
      var filename = '';
      var uri = new URI(url);
      uri.search(function(data){
        filename = data['preview_theme_id'] + '.png';
      });
    
      var mongo = req.mongo;
      var collection = mongo.collection('web_shots');
      collection.findOne({'url_md5':filename}, function(err, doc){
        if(!err && doc){
          debug(JSON.stringify(doc));
          return res.send(doc.content);
        } else {
          debug('filename: ', filename);
          mongo.collection('web_shots_lock').findOne({'url_md5':filename},function(err,doc){
            if(!doc)  { 
              mongo.collection('web_shots_lock').save({url_md5:filename,created_at:new Date()},{w:1},function(){
                shot.shot(url, function (err, data) {
                  if(!err && data) {
                    mongo.collection('web_shots').save({url_md5:filename,content:data,created_at:new Date()},{w:1},function(){
                      debug('update success!');
                      mongo.collection('web_shots_lock').findAndRemove({url_md5:filename},function(){});
                    });
                  } else {
                    mongo.collection('web_shots_lock').findAndRemove({url_md5:filename},function(){});
                  }
                });
              });
              return res.status(201).end();
            }
          });
          return res.status(202).end();
        }
      });
    });
    
    5 条回复    2016-05-17 11:19:25 +08:00
    doublleft
        1
    doublleft  
       2016-05-16 15:28:18 +08:00
    天哪,原来不止我一个人用 nodejs 写接口,代码这么乱

    你们都是这样吗,一点集成、封装都没。。我以为我写的够糙快猛了
    muru
        2
    muru  
    OP
       2016-05-16 15:35:54 +08:00
    @doublleft 我刚到公司实习,然后写 nodejs 的人被挖走了,就只能自己看他的代码,借口出问题不知道是哪儿。。。
    doublleft
        3
    doublleft  
       2016-05-16 15:53:01 +08:00
    @muru 这样贴代码很难定位的,看你也打了 debugger 。爱莫能助,推荐个调试工具 `npm install devtool` 吧。。
    xujialiang
        4
    xujialiang  
       2016-05-16 15:59:30 +08:00
    if(!doc) 没有 else 。。。
    haoc
        5
    haoc  
       2016-05-17 11:19:25 +08:00
    不知道你指的那个 api 。但我看到你的 function 都是异步的,哪会有 return ?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2877 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 14:54 · PVG 22:54 · LAX 07:54 · JFK 10:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.