Redisの有効期限を経由して、頻繁に送るテキストメッセージを制限し、キャッシングによるショートメッセージインタフェース、および電話番号を達成するために、アリクラウドノード

1、最初のRedisをインストールし、NPMのRedis --saveをインストール

RedisHelper.js

CONSTのRedis =必要とする( 'Redisの' )。 関数のSetString(キー、値){ せredishost = global.urls.controllers.RedisServer.split( ":")[0 ]; redisportましょう( ":")= global.urls.controllers.RedisServer.split [1 ]。 CONSTクライアント = redis.createClient(redisport、redishost、{})。 client.select( 2、関数(){ / * ... * / })。 // ?错误监听 client.on( "エラー"、関数(ERR){ にconsole.log( "エラー" + ERR); }); client.set(キー、値、redis.print)。 // 三分钟后过期 client.expire(キー、180 )。 client.quit(); } 関数のGetString(キー){ 戻り 、新たな約束((決意、リジェクト)=> { せredishost = global.urls.controllers.RedisServer.split( ":")[0 ]; せredisport = global.urls.controllers.RedisServer .split( ":")[1 ]; constのクライアント = redis.createClient(redisport、redishost、{}); client.select( 2、関数(){ / * ... * / }); //?错误监听 client.on( "エラー"、関数(ERR){ にconsole.log( "エラー" + ERR); }); // これは、JavaScriptの文字列が返されます client.get(キー、ファンクション(ERR、リプライ){ 場合(ERR)スローERRを; はconsole.log( 'ガット:' + リプライ); 決意(返信) client.quit(); }); }) } exports.SetString = のSetString。 exports.GetString =のGetString。
config.josn

コントローラ:{ "RedisServer": "127.0.0.1:6379"}
//乱数を生成し、グローバル変数に設定ファイル
FS =(「FS」を必要とせ); 機能RangeCode(長さ){ // ランダムに生成されたコードは、番号の指定された VAR範囲= 関数(開始、終了)を{ VaRのアレイ= []; のためにvarは ; I <エンド++ Iがスタート= のArray.push(I); I) の戻り配列; }; LET getnum = 関数(){ せNUM = Math.floor(Math.random ()* 10 ); IF(NUM == 0 ){ 戻りgetnum(); } そう 戻り値のNUM; } VARの randomstr =範囲(0、長さ).MAP(関数(X){ 戻りgetnum(); })(参加。 '' )。 リターンrandomstr。 } 関数UPDATECONFIG(){ たconfigfileせ = "../config/ServerConfig.json" VARのURL = JSON.parse(fs.readFileSync(たconfigfile))。 global.urls = のURL。 返す ; } exports.RangeCode = RangeCode。 exports.UpdateConfig = UPDATECONFIG。

2、テキストメッセージ

//npm install @alicloud/pop-core -S

constのログ=必要( './ロガー');
CONST utiltoolsは=(」./ UtilTools')を必要とします。
CONSTのRedis =( "./ RedisHelper")を必要とします。
非同期関数SendSMSCode(IP、PHONENUM、コールバック){
     試み{
         //は短いコードを形成する 
        LETのutiltools.RangeCodeコード=(6 );
         //は有効期限コード3分に設定し、クラスがインスタンス化される 
        LETのcodeobj = 新しい新しい smsCode.CMSCode(IPをコード、PHONENUM ,. 1、新しい新しい A日付((新新 A日付())getTime()3 * 60 + * 1000。 )); 
        constのSMSCLIENT =必要( '@ alicloud / SMS-SDK' // ACCESS_KEY_ID /実際のアプリケーションACCESS_KEY_SECRET代わりにアカウント情報 
        のconst accessKeyId = '***' 
        のconst secretAccessKey = '***'
         // 初期化sms_client
        VAR SMSCLIENTは= 新しい新しいSMSCLIENTを({accessKeyId、secretAccessKey}) 
        しましょうredisTemp = のawait redis.GetString(PHONENUM);
         IF(redisTemp && 新しい新しい。日付()getTime() - redisTemp <1000年){ 
            log.logger.info(「GET Redisのキャッシュモバイル時間: "+ redisTemp); 
            のlet returnobj = {結果:0、でresultObj:"! "あまりにも頻繁に発生する}; 
            callback.send(returnobj); 
            callback.end(); 
            戻り値; 
        } 

        // 送信メッセージ
        smsClient.sendSMS ({ 
            の電話番号:PHONENUM、
            SignName: '釣りのApp'
            TemplateCode: 'SMS *** _' 
            TemplateParam: { "コード": "+ +コード'}' 
        })を(機能(RES){ 
            LET {コード} = RES;
             IF(コード===「OK ' ){
                 // 戻りプロセスパラメータは 
                (log.logger.info "NUMが正常に送信された:" PHONENUM + + "コード:" + コード); 
                SetSMSArray(codeobj); 
                LETのreturnobj = {結果:. 1 }; 
                callback.send(returnobj ); 
                callback.end()。
            }  {
                log.logger.error("发送失败:" + コード); 
                returnobjせ = {0、でresultObj:検索結果を"返回失败" 、ERR}。
                callback.send(returnobj)。
                callback.end(); 
            } 
        }、関数(ERR){ 
            log.logger.error(ERR)。
            VaRの returnobj = {結果:0、でresultObj: "错误" 、ERR}。
            callback.send(returnobj)。
            callback.end(); 
        })
    } キャッチ(例外){ 
        log.logger.error(例外)。
    } 
}
関数CompareSmsCode(PHONENUM、コード){
     VAR I = global.SMScodearray.length。
    一方、(i-- ){
         場合(global.SMScodearray [I] .getPhonum()== PHONENUM){
             もし、((global.SMScodearray [I] .getExpireTime() - 新しい日付())> 0 ){ 
                log.logger .DEBUG( "验证未过期:" + global.SMScodearray [I] .getExpireTime())。
                戻りコード== global.SMScodearray [I] .getCode()。
            } 
            { 
                log.logger.debug( "验证码已过期:" +global.SMScodearray [I] .getExpireTime())。
                リターン はfalse ; 
            } 

        } 
    } 
    を返す 
}
関数SetSMSArray(smsmodel){ 
//定义全局存手机号和验证码
VAR I = global.SMScodearray.length。
isexist = falseをしましょう。
一方、(i--){
IF(global.SMScodearray [I] .getPhonum()== smsmodel.getPhonum()){
global.SMScodearray [I] .setTimes(global.SMScodearray [I] .getTimes()+ 1) ;
global.SMScodearray [I] .setCode(smsmodel.getCode())。
global.SMScodearray [I] .setExpireTime(smsmodel.getExpireTime())。
isexist =はtrue。
}
}
もし{(isexist!)
global.SMScodearray.push(smsmodel)。
}
  //动态存手机号
redis.SetString(smsmodel.getPhonum()、新しいDate()。getTime())
}
 

おすすめ

転載: www.cnblogs.com/chuanq/p/12055890.html