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

2016-05-16 15:24:57 +08:00
 muru

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

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();
    }
  });
});
2842 次点击
所在节点    Node.js
5 条回复
doublleft
2016-05-16 15:28:18 +08:00
天哪,原来不止我一个人用 nodejs 写接口,代码这么乱

你们都是这样吗,一点集成、封装都没。。我以为我写的够糙快猛了
muru
2016-05-16 15:35:54 +08:00
@doublleft 我刚到公司实习,然后写 nodejs 的人被挖走了,就只能自己看他的代码,借口出问题不知道是哪儿。。。
doublleft
2016-05-16 15:53:01 +08:00
@muru 这样贴代码很难定位的,看你也打了 debugger 。爱莫能助,推荐个调试工具 `npm install devtool` 吧。。
xujialiang
2016-05-16 15:59:30 +08:00
if(!doc) 没有 else 。。。
haoc
2016-05-17 11:19:25 +08:00
不知道你指的那个 api 。但我看到你的 function 都是异步的,哪会有 return ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/278976

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX