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())
}