来实现页面截屏功能,为了避免重复截屏就加入了锁。不知道是哪个环节有问题,求大牛看看。。
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(); } }); });
1 doublleft 2016-05-16 15:28:18 +08:00 天哪,原来不止我一个人用 nodejs 写接口,代码这么乱 你们都是这样吗,一点集成、封装都没。。我以为我写的够糙快猛了 |
3 doublleft 2016-05-16 15:53:01 +08:00 @muru 这样贴代码很难定位的,看你也打了 debugger 。爱莫能助,推荐个调试工具 `npm install devtool` 吧。。 |
4 xujialiang 2016-05-16 15:59:30 +08:00 if(!doc) 没有 else 。。。 |
5 haoc 2016-05-17 11:19:25 +08:00 不知道你指的那个 api 。但我看到你的 function 都是异步的,哪会有 return ? |