DoubleSpout / ccap

node.js generate captcha using c++ library CImg without install any other lib or software
http://snoopyxdy.blog.163.com/blog/static/60117440201301842110923/
480 stars 83 forks source link

能否禁用定时器 #31

Closed lonso closed 9 years ago

lonso commented 9 years ago

定时器有时候在项目启动的时候报错. 能否提供一个参数控制是否使用定时器, 因为有时候并不需要使用定时器.

错误如下: { [Error: ENOENT, no such file or directory '/data/projects/sudiyi_edms_new/node_modules/ccap/cap_img/captcha_1011_17099_1436767862339_15.jpeg'] errno: -2, code: 'ENOENT', path: '/data/projects/sudiyi_edms_new/node_modules/ccap/cap_img/captcha_1011_17099_1436767862339_15.jpeg', syscall: 'unlink' } Error: ENOENT, no such file or directory '/data/projects/sudiyi_edms_new/node_modules/ccap/cap_img/captcha_1011_17099_1436767862339_15.jpeg'

DoubleSpout commented 9 years ago

定时器是定期更新验证码,否则验证码图片永远就那么几十个? 这个错误是怎么报出的?能详细说明吗?

lonso commented 9 years ago

是这样的,用定时器生成图片后,我们把验证码传到阿里云. 然后过一段时间有更新重启服务的时候,就不会提示出错

    fileArray.forEach(function(v,i){ //清空文件夹
        try {
            if(isTiming){
                var nameList = v.split('_')
                if(nameList[2] == pid && (now - nameList[3]>=60*1000*2)){
                    fs.unlinkSync(p.join(path,v));
                }
            }
            else{
                fs.unlinkSync(p.join(path,v));
            }       
        } catch(e) {
            console.log(e);  //这里提示出错的信息
        }
    })
DoubleSpout commented 9 years ago

你是连带定时器生成的图片一起拷贝到阿里云上了?

lonso commented 9 years ago

没有,图片生成逻辑,是自己设置的。只是用来生成图片,其他的后续自己处理

ReDreamport commented 9 years ago

至少应该暴露一个方法,可以停止内部一切setTimeout/setInterval。否则Kill进程时,因为有定时器在,进程会挂住,要强杀。我粗看了下代码,setTimeout的返回值没存下来,没法clearTimeout。

DoubleSpout commented 9 years ago

已经添加相应方法,启动和停止定时器的运行~