瀑布流图片网站源码分享,瀑布流看图软件

大家好,今天小编来为大家解答瀑布流图片网站源码分享这个问题,瀑布流看图软件很多人还不知道,现在让我们一起来看看吧!

作者:西岚

转发链接:https://juejin.im/post/5dadd0236fb9a04de04d968e

目录

Node.js实现抢票小工具&短信通知提醒(上)「干货」

Node.js实现抢票小工具&短信通知提醒(下)「干货」本篇

开发购票功能

首先我们在init方法里做个判断,如果有余票才去购票,没有余票购个毛

classQueryTicket{\nconstructor({data,phoneNumber,cookie,day}){\n//constructor代码…\n}\n//初始化\nasyncinit(){\nletticketList=awaitthis.handleQueryTicket()\n//如果有余票\nif(ticketList.length){\n//把余票传入购票逻辑方法,返回短信通知所需要的数据\nletresParse=awaitthis.handleBuyTicket(ticketList)\n}\n}\n\n//查询余票的逻辑\nasynchandleQueryTicket(){\n//查询余票代码…\n}\n//调用查询余票接口\nrequestTicket(){\n//调用查询余票接口代码…\n}\n//购票相关逻辑\nasynchandleBuyTicket(ticketList){\nletyear=newDate().getFullYear()//年份,\nletmonth=newDate().getMonth()+1//月份,拼接购票日期用得上,因为余票接口只返回几号\nlet{\nonStationName,//起始站点名\noffStationName,//结束站点名\nlineId,//线路id\nvehTime,//发车时间\nstartTime,//预计上车时间\nonStationId,//上车的站台id\noffStationId//到站的站台id\n}=this.data//初始化的数据\n\nletstation=`${onStationName}-${offStationName}`//站点,发短信时候用到:&34;\nletdateStr=&34;;//车票日期\nlettickAmount=&34;//总张数\nticketList.forEach(item=>{\ndateStr=dateStr+`${year}-${month}-${item.day},`\ntickAmount=tickAmount+`${item.ticketLeft}张,`\n})\n\nletbuyTicket={\nlineId,//线路id\nvehTime,//发车时间\nstartTime,//预计上车时间\nonStationId,//上车的站点id\noffStationId,//目标站点id\ntradePrice:&39;,//金额\nsaleDates:dateStr.slice(0,-1),\npayType:&39;//支付方式,微信支付\n}\n\n//调用购票接口\nletdata=querystring.stringify(buyTicket)\nletres=awaitthis.requestOrder(data)//返回json数据,是否购票成功等等\n//把发短信所需要数据都要传入\nreturnObject.assign({},JSON.parse(res.data),{queryParam:{dateStr,tickAmount,startTime,station}})\n}//购票相关逻辑\n//调用购票接口\nrequestOrder(obj){\nreturnaxios.post(&39;,obj,{\nheaders:{\n&39;:&39;,\n&39;:&34;,\n&34;:this.cookie\n}\n})\n}\nhandleInfoUser(){}//通知用户的逻辑\nsendMSg(){}//发短信接口\n}\n\n复制代码

到这里,查询余票,购票这两个核心操作已经完成。

目前还剩下,如何通知用户是否购票成功。

之前我尝试过使用qq邮箱的smtp服务,抢票成功后发送邮件通知,但是我觉得吧,并不好用,主要是我没有打开邮箱的习惯,没网也收不到,所以,并没有采纳这个方案。

加上之前我注册过企业认证的公众号,腾讯云免费送了我1000条短信通知,而且短信也比较直观,所以我这里就安装腾讯云的SDK,部署了一套发短信的功能。

腾讯云短信的相关内容

其实看看文档就行了,我也是copy文档,注意看短信单发那部分

https://cloud.tencent.com/document/product/382/3772

如果跟我一样有企业认证的话,看快速入门这里就行了,一步步跟着操作

看下短信正文,{Number}这些里面的数字是变量。

就是说短信的模板是固定的,但是里面有{Number}的内容可以自定义

调用的时候,里面的数字对应着传过去的参数数组序号,{1}代表数组[0]参数,以此类推

提交审核,审核一般很快就通过,也就是几十万毫秒吧

开发通知功能

classQueryTicket{\nconstructor({data,phoneNumber,cookie,day}){\n//constructor代码…\n}\n//初始化\nasyncinit(){\nletticketList=awaitthis.handleQueryTicket()\n//如果有余票\nif(ticketList.length){\n//把余票传入购票逻辑方法,返回短信通知所需要的数据\nletresParse=awaitthis.handleBuyTicket(ticketList)\n//执行通知逻辑\nthis.handleInfoUser(resParse)\n}\n}\n\n//查询余票的逻辑\nasynchandleQueryTicket(){\n//查询余票代码…\n}\n//调用查询余票接口\nrequestTicket(){\n//调用查询余票接口代码…\n}\n//购票相关逻辑\nasynchandleBuyTicket(ticketList){\n//购票代码…\n}\n//调用购票接口\nrequestOrder(obj){\n//购票接口请求代码…\n}\n//通知用户的逻辑\nasynchandleInfoUser(parseData){\n//获取上一步购票的response数据和我们拼接的数据\nlet{returnCode,returnData:{main:{lineName,tradePrice}},queryParam:{dateStr,tickAmount,startTime,station}}=parseData\n//如果购票成功,则返回500\nif(returnCode===&34;){\nletres=awaitthis.sendMsg({\ndateStr,//日期\ntickAmount:tickAmount.slice(0,-1),//总张数\nstation,//站点\nlineName,//巴士名称/路线名称\ntradePrice,//总价\nstartTime,//出发时间\nphoneNumber:this.phoneNumber,//手机号\n})\n//如果发信成功,则不再进行抢票操作\nif(res.result===0&&res.errmsg===&34;){\nthis.setStop(true)\n}else{\n//失败不做任何操作\nconsole.log(res.errmsg)\n}\n}else{\n//失败不做任何操作\nconsole.log(resParse[&39;])\n}\n}\n//发短信接口\nsendMSg(){\nlet{dateStr,tickAmount,station,lineName,phoneNumber,startTime,tradePrice}=obj\nletappid=140034324;//SDKAppID以1400开头\n//短信应用SDKAppKey\nletappkey=&34;;\n//短信模板ID,需要在短信控制台中申请\nlettemplateId=7839;//NOTE:这里的模板ID`7839`只是示例,真实的模板ID需要在短信控制台中申请\n//签名\nletsmsSign=&34;;//NOTE:签名参数使用的是`签名内容`,而不是`签名ID`。这里的签名&34;只是示例,真实的签名需要在短信控制台申请\n//实例化QcloudSms\nletqcloudsms=QcloudSms(appid,appkey);\nletssender=qcloudsms.SmsSingleSender();\n//这里的params就是短信里面可以自定义的内容,也就是填入{1}{2}..的内容\nletparams=[dateStr,station,lineName,startTime,tickAmount,tradePrice];\n//用promise来封装下异步操作\nreturnnewPromise((resolve,reject)=>{\nssender.sendWithParam(86,phoneNumber,templateId,params,smsSign,&34;,&34;,function(err,res,resData){\nif(err){\nreject(err)\n}else{\nresolve(resData)\n}\n});\n})\n}\n}\n复制代码

如果发信成功,返回result:0

到这里,大部分需求已经完成了,还剩下一个定时任务

定时任务

也声明一个类,这里我们用到的是schedule

//定时任务\nclassSetInter{\nconstructor({timer,fn}){\nthis.timer=timer//每几秒执行\nthis.fn=fn//执行的回调\nthis.rule=newschedule.RecurrenceRule();//实例化一个对象\nthis.rule.second=this.setRule()//调用原型方法,schedule的语法而已\nthis.init()\n}\nsetRule(){\nletrule=[];\nleti=1;\nwhile(i<60){\nrule.push(i)\ni+=this.timer\n}\nreturnrule//假设传入的timer为5,则表示定时任务每5秒执行一次\n//[1,6,11,16,21,26,31,36,41,46,51,56]\n}\ninit(){\nschedule.scheduleJob(this.rule,()=>{\nthis.fn()//定时调用传入的回调方法\n});\n}\n}\n\n复制代码

多个用户抢票

假设我们有两个用户要抢票,所以定义两个obj,实例化下QueryTicket类

data:{//用户1\nlineId:111130,\nvehTime:0722,\nstartTime:0751,\nonStationId:564492,\noffStationId:17990,\nonStationName:&39;,\noffStationName:&34;,\ntradePrice:0,\nsaleDates:&39;,\nbeginDate:&39;,\n},\nphoneNumber:123123123,\ncookie:&39;,\nday:&34;\n}\nletobj2={//用户2\ndata:{\nlineId:134423,\nvehTime:1820,\nstartTime:1855,\nonStationId:4322,\noffStationId:53231,\nonStationName:&39;,\noffStationName:&34;,\ntradePrice:0,\nsaleDates:&39;,\nbeginDate:&39;,\n},\nphoneNumber:175932123124,\ncookie:&39;,\nday:&34;\n}\nletticket=newQueryTicket(obj)//用户1\nletticket2=newQueryTicket(obj2)//用户2\n\nnewSetInter({\ntimer:1,//每秒执行一次,建议5秒,不然怕被ip拉黑,我这里只是为了方便下面截图\nfn:function(){\n[ticket,ticket2].map(item=>{//同时进行两个用户的抢票\nif(!item.getStop()){//调用实例的原型方法,判断是否停止抢票,如果没有则继续抢\nitem.init()\n}else{//如果抢到票了,则不继续抢票\nconsole.log(&39;)\n}\n})\n}\n})\n\n复制代码

nodeindex.js运行下,跑起来了

如果他抢到票的话,我就会收到短信通知:

打开手机,看下订单信息

搞定,收工

写在最后

其实可以在此基础上还能添加更多功能,比如直接抓取登录接口获取cookie,指定路线抢票,还有错误处理啊啥的

值得注意的是,请求接口不能太频繁,最好控制在5秒一次的频率,不然会给别人造成困扰,也容易被ip拉黑

推荐JavaScript学习相关文章

《那些不常见,但却非常实用的JS知识点(上)》

《那些不常见,但却非常实用的JS知识点(下)》

《如何为团队定制自己的Node.js框架?》

《细品原生JS从初级到高级知识点汇总(一)》

《细品原生JS从初级到高级知识点汇总(二)》

《细品原生JS从初级到高级知识点汇总(三)》

《细品原生JS从初级到高级知识点汇总(四)》

《学习jQuery源码整体架构,打造属于自己的js类库》

《细说RTSP实现前端直播流探索记「干货」》

《一文带你搞懂前端登陆设计》

《使用Node.js将图片中的苹果变成橘子「实践」》

《基于Canvas实现的高斯模糊(上)「JS篇」》

《基于Canvas实现的高斯模糊(下)「JS篇」》

《由浅入深,66条JavaScript面试知识点(一)》

《由浅入深,66条JavaScript面试知识点(二)》

《由浅入深,66条JavaScript面试知识点(三)》

《由浅入深,66条JavaScript面试知识点(四)》

《由浅入深,66条JavaScript面试知识点(五)》

《由浅入深,66条JavaScript面试知识点(六)》

《由浅入深,66条JavaScript面试知识点(七)》

《为什么setTimeout有最小时延4ms?》

《如何处理Node.js中出现的未捕获异常?》

《Angularv10.0.0正式发布,不再支持IE9/10》

《基于Docker的SSR持续开发集成环境实践》

《细聊图解webpack指南手册》

《一文带你彻底搞懂NPM知识点「进阶篇」》

《细聊webpack性能优化面面观》

《JS实现各种日期操作方法汇总》

《「实践」细聊前端性能优化总结》

《「实践」浏览器中的画中画(Picture-in-Picture)模式及其API》

《「多图」一文带你彻底搞懂WebWorkers(上)》

《「多图」一文带你彻底搞懂WebWorkers(中)》

《深入细聊前端下载总结「干货」》

《细品西瓜播放器功能分析(上)「实践」》

《细品西瓜播放器功能分析(下)「实践」》

《细聊50道JavaScript基础面试题「附答案」》

《webpack4主流程源码解说以及动手实现一个简单的webpack(上)》

《webpack4主流程源码解说以及动手实现一个简单的webpack(下)》

《细聊前端架构师的视野》

《细聊应用场景再谈防抖和节流「进阶篇」》

《前端埋点统一接入方案实践》

《细聊微内核架构在前端的应用「干货」》

《一种高性能的Tree组件实现方案「干货」》

《进击的JAMStack》

《前后端全部用JS开发是什么体验(Hybrid+Egg.js经验分享)上》

《前后端全部用JS开发是什么体验(Hybrid+Egg.js经验分享)中》

《前后端全部用JS开发是什么体验(Hybrid+Egg.js经验分享)下》

《一文带你搞懂babel-plugin-import插件(上)「源码解析」》

《一文带你搞懂babel-plugin-import插件(下)「源码解析」》

《JavaScript常用API合集汇总「值得收藏」》

《推荐10个常用的图片处理小帮手(上)「值得收藏」》

《推荐10个常用的图片处理小帮手(下)「值得收藏」》

《JavaScript中ES6代理的实际用例》

《12个实用的前端开发技巧总结》

《一文带你搞懂搭建企业级的npm私有仓库》

《教你如何使用内联框架元素IFrames的沙箱属性提高安全性?》

《细说前端开发UI公共组件的新认识「实践」》

《细说DOMAPI中append和appendChild的三个不同点》

《细品淘系大佬讲前端新人如何上王者「干货」》

《一文带你彻底解决背景跟随弹窗滚动问题「干货」》

《推荐常用的5款代码比较工具「值得收藏」》

《Node.js实现将文字与图片合成技巧》

《爱奇艺云剪辑Web端的技术实现》

《我再也不敢说我会写前端Button组件「实践」》

《NodeXComponent-滴滴集团Node.js生态组件体系「实践」》

《NodeBuffers完整指南》

《推荐18个webpack精美插件「干货」》

《前端开发需要了解常用7种JavaScript设计模式》

《浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务》

《了不起的WebpackHMR学习指南(上)「含源码讲解」》

《了不起的WebpackHMR学习指南(下)「含源码讲解」》

《10个打开了我新世界大门的WebAPI(上)「实践」》

《10个打开了我新世界大门的WebAPI(中)「实践」》

《10个打开了我新世界大门的WebAPI(下)「实践」》

《「图文」ESLint在中大型团队的应用实践》

《Deno是代码的浏览器,你认同吗?》

《前端存储除了localStorage还有啥?》

《Javascript多线程编程?的前世今生》

《微前端方案qiankun(实践及总结)》

《「图文」V8垃圾回收原来这么简单?》

《Webpack5模块联邦引发微前端的革命?》

《基于Web端的人脸识别身份验证「实践」》

《「前端进阶」高性能渲染十万条数据(时间分片)》

《「前端进阶」高性能渲染十万条数据(虚拟列表)》

《图解Promise实现原理(一):基础实现》

《图解Promise实现原理(二):Promise链式调用》

《图解Promise实现原理(三):Promise原型方法实现》

《图解Promise实现原理(四):Promise静态方法实现》

《实践教你从零构建前端Lint工作流「干货」》

《高性能多级多选级联组件开发「JS篇」》

《深入浅出讲解Node.jsCLI工具最佳实战》

《延迟加载图像以提高Web网站性能的五种方法「实践」》

《比较JavaScript对象的四种方式「实践」》

《使用ServiceWorker让你的Web应用如虎添翼(上)「干货」》

《使用ServiceWorker让你的Web应用如虎添翼(中)「干货」》

《使用ServiceWorker让你的Web应用如虎添翼(下)「干货」》

《前端如何一次性处理10万条数据「进阶篇」》

《推荐三款正则可视化工具「JS篇」》

《如何让用户选择是否离开当前页面?「JS篇」》

《JavaScript开发人员更喜欢Deno的五大原因》

《仅用18行JavaScript实现一个倒数计时器》

《图文细说JavaScript的运行机制》

《一个轻量级JavaScript全文搜索库,轻松实现站内离线搜索》

《推荐Web程序员常用的15个源代码编辑器》

《10个实用的JS技巧「值得收藏」》

《细品269个JavaScript小函数,让你少加班熬夜(一)「值得收藏」》

《细品269个JavaScript小函数,让你少加班熬夜(二)「值得收藏」》

《细品269个JavaScript小函数,让你少加班熬夜(三)「值得收藏」》

《细品269个JavaScript小函数,让你少加班熬夜(四)「值得收藏」》

《细品269个JavaScript小函数,让你少加班熬夜(五)「值得收藏」》

《细品269个JavaScript小函数,让你少加班熬夜(六)「值得收藏」》

《深入JavaScript教你内存泄漏如何防范》

《手把手教你7个有趣的JavaScript项目-上「附源码」》

《手把手教你7个有趣的JavaScript项目-下「附源码」》

《JavaScript使用mediaDevicesAPI访问摄像头自拍》

《手把手教你前端代码如何做错误上报「JS篇」》

《一文让你彻底搞懂移动前端和Web前端区别在哪里》

《63个JavaScript正则大礼包「值得收藏」》

《提高你的JavaScript技能10个问答题》

《JavaScript图表库的5个首选》

《一文彻底搞懂JavaScript中Object.freeze与Object.seal的用法》

《可视化的JS:动态图演示-事件循环EventLoop的过程》

《教你如何用动态规划和贪心算法实现前端瀑布流布局「实践」》

《可视化的js:动态图演示Promises&Async/Await的过程》

《原生JS封装拖动验证滑块你会吗?「实践」》

《如何实现高性能的在线PDF预览》

《细说使用字体库加密数据-仿58同城》

《Node.js要完了吗?》

《Pug3.0.0正式发布,不再支持Node.js6/8》

《纯JS手写轮播图(代码逻辑清晰,通俗易懂)》

《JavaScript20年中文版之创立标准》

《值得收藏的前端常用60余种工具方法「JS篇」》

《箭头函数和常规函数之间的5个区别》

《通过发布/订阅的设计模式搞懂Node.js核心模块Events》

《「前端篇」不再为正则烦恼》

《「速围」Node.jsV14.3.0发布支持顶级Await和REPL增强功能》

《深入细品浏览器原理「流程图」》

《JavaScript已进入第三个时代,未来将何去何从?》

《前端上传前预览文件image、text、json、video、audio「实践」》

《深入细品EventLoop和浏览器渲染、帧动画、空闲回调的关系》

《推荐13个有用的JavaScript数组技巧「值得收藏」》

《前端必备基础知识:window.location详解》

《不要再依赖CommonJS了》

《犀牛书作者:最该忘记的JavaScript特性》

《36个工作中常用的JavaScript函数片段「值得收藏」》

《Node+H5实现大文件分片上传、断点续传》

《一文了解文件上传全过程(1.8w字深度解析)「前端进阶必备」》

《【实践总结】关于小程序挣脱枷锁实现批量上传》

《手把手教你前端的各种文件上传攻略和大文件断点续传》

《字节跳动面试官:请你实现一个大文件上传和断点续传》

《谈谈前端关于文件上传下载那些事【实践】》

《手把手教你如何编写一个前端图片压缩、方向纠正、预览、上传插件》

《最全的JavaScript模块化方案和工具》

《「前端进阶」JS中的内存管理》

《JavaScript正则深入以及10个非常有意思的正则实战》

《前端面试者经常忽视的一道JavaScript面试题》

《一行JS代码实现一个简单的模板字符串替换「实践」》

《JS代码是如何被压缩的「前端高级进阶」》

《前端开发规范:命名规范、html规范、css规范、js规范》

《【规范篇】前端团队代码规范最佳实践》

《100个原生JavaScript代码片段知识点详细汇总【实践】》

《关于前端174道JavaScript知识点汇总(一)》

《关于前端174道JavaScript知识点汇总(二)》

《关于前端174道JavaScript知识点汇总(三)》

《几个非常有意思的javascript知识点总结【实践】》

《都2020年了,你还不会JavaScript装饰器?》

《JavaScript实现图片合成下载》

《70个JavaScript知识点详细总结(上)【实践】》

《70个JavaScript知识点详细总结(下)【实践】》

《开源了一个JavaScript版敏感词过滤库》

《送你43道JavaScript面试题》

《3个很棒的小众JavaScript库,你值得拥有》

《手把手教你深入巩固JavaScript知识体系【思维导图】》

《推荐7个很棒的JavaScript产品步骤引导库》

《Echa哥教你彻底弄懂JavaScript执行机制》

《一个合格的中级前端工程师需要掌握的28个JavaScript技巧》

《深入解析高频项目中运用到的知识点汇总【JS篇】》

《JavaScript工具函数大全【新】》

《从JavaScript中看设计模式(总结)》

《身份证号码的正则表达式及验证详解(JavaScript,Regex)》

《浏览器中实现JavaScript计时器的4种创新方式》

《Three.js动效方案》

《手把手教你常用的59个JS类方法》

《127个常用的JS代码片段,每段代码花30秒就能看懂-【上】》

《深入浅出讲解js深拷贝vs浅拷贝》

《手把手教你JS开发H5游戏【消灭星星】》

《深入浅出讲解JS中this/apply/call/bind巧妙用法【实践】》

《手把手教你全方位解读JS中this真正含义【实践】》

《书到用时方恨少,一大波JS开发工具函数来了》

《干货满满!如何优雅简洁地实现时钟翻牌器(支持JS/Vue/React)》

《手把手教你JS异步编程六种方案【实践】》

《让你减少加班的15条高效JS技巧知识点汇总【实践】》

《手把手教你JS开发H5游戏【黄金矿工】》

《手把手教你JS实现监控浏览器上下左右滚动》

《JS经典实例知识点整理汇总【实践】》

《2.6万字JS干货分享,带你领略前端魅力【基础篇】》

《2.6万字JS干货分享,带你领略前端魅力【实践篇】》

《简单几步让你的JS写得更漂亮》

《恭喜你获得治疗JSthis的详细药方》

《谈谈前端关于文件上传下载那些事【实践】》

《面试中教你绕过关于JavaScript作用域的5个坑》

《Jquery插件(常用的插件库)》

《【JS】如何防止重复发送ajax请求》

《JavaScript+Canvas实现自定义画板》

《Continuation在JS中的应用「前端篇」》

作者:西岚

转发链接:https://juejin.im/post/5dadd0236fb9a04de04d968e

关于瀑布流图片网站源码分享到此分享完毕,希望能帮助到您。

站内搜索