NodeJS

nodejs 下载必应中国的壁纸

。_饼干妹妹 提交于 2020-03-01 09:38:19
bing 壁纸很好看,每天下载下来当桌面还是不错的,其实抓取图片方法很简单,但是图片url还是得下一番功夫去查的。花点时间,还是找到了必应中国的高清壁纸(1980*1080)地址,下面是nodejs抓取图片的代码: /* 下载bing中国壁纸到本目录下 分辨率为1980*1080,可设置 */ var http = require('http'); var fs = require('fs'); var options = { hostname: 'cn.bing.com', port: 80, path: '/HPImageArchive.aspx?idx=0&n=1', method: 'GET' }; var req = http.request(options, function(res) { var reg = new RegExp("<url>/az/hprichbg/rb/(.*)_1366x768.jpg</url>"); var body = ''; res.on('data', function(chunk) { body += chunk; }).on('end', function() { reg.test(body); var img = RegExp.$1; console.log(img); writestream = fs

HTML5 WebSockets+NodeJs 实例教程

亡梦爱人 提交于 2020-03-01 07:39:18
HTML 5 中WebSockets是极其重要的部分,它的一个好处之一是减少了不必要的网络流量。它主要是用于在客户机和服务器之间建立单一的双向连接。这意味着客户只需要发送一个请求到服务端,那么服务端则会进行处理,处理好后则将其返回给客户端,客户端则可以在等待这个时间继续去做其他工作,整个过程是异步的。 WebSockets应用的场景是很广泛的,当需要实时显示数据的时候(比如股票,实时聊天,对战游戏等),用户最期望的是不需要去刷新页面,否则获得的用户体验是不佳的。而在最新的HTML 5标准中,出现了两个解决该方面问题的规范,一个是服务端推送事件(Server Sent Events),另外一个是WebSockets,其中服务端推送事件由于在IE 中不能获得原生支持,因此不在本文讨论范围之中。本文着重讲解HTML 5中WebSockets的相关知识。首先我们还是来复习下在HTTP 的网络世界中的基本架构,这是下一步学习的基础。 客户-服务器模式是网络世界中最经典的模式了,能允许多个用户通过前端图形界面的方式去,如下图: 通常,客户服务端模式分为两层和三层。在三层结构中,通常是出现在web应用中,中间一层使用了各类的中间件服务器,分别如下两图所示: 我们来看下HTML 5 WebSocket的架构图,如下: 在HTML 5 WebSockets标准中,仅仅定义了一些列的API

Nodejs 与 javascript 不可通用的原因

て烟熏妆下的殇ゞ 提交于 2020-02-29 15:15:50
1. 三种规范: AMD / CMD / COMMONJS AMD 与 CMD 都属于 COMMONJS 规范,规范提出的目的是为 js 这门松散的语言提供 一致性,标准性 的模块化机制,为开发大型应用,桌面应用,服务后台提供前提。 三种规范分别具有不同的实现, AMD -> requirejs, CMD -> seajs, COMMONJS -> nodejs , 这里只列出比较常见的实现。*** 大体上三种规范重叠性比较大,具体不同请具体查看规范对比 任何上述标准的实现中需要提供 require(), module,module.exports,exports 四个全局对象。 ####2. 一切为了安全: 浏览器 浏览器的与众不同,在于它是一个开放平台式的软件,浏览器只是提供了一些运行环境,而实际的内容贡献者确不是浏览器厂商,为了保证网页发布者的安全,网页浏览者的安全,浏览器不得不限制很多权 限,防止对用户,网页发布者的危害,常见的有: 本地文件操作权限,可执行命令访问权限 等,与网页相关的有 跨域访问限制等。 ####3. 多语言集成 谈到web开发,Html Css Js 算是三个元老级的语言了,其实,从程序的角度来看,html ,css 并不算是一种编程语言,甚至在一定角度上,更像是一种协定好了的配置文件,或者协议栈。所以, 在浏览器中,Js 能够交互的多语言环境

用Pomelo 搭建一个简易的推送平台

前提是你 提交于 2020-02-29 11:12:37
<h2 id="menuIndex0">前言</h2> <p>实际上,个人感觉,pomelo 目前提供的两个默认<code>sioconnector</code>和<code>hybridconnector</code> 使用的协议并不适合用于做手机推送平台,在pomelo的一份公开ppt里面,有提到过, 网易的消息推送平台是基于pomelo开发的 (一个frontend 支持30w 长连接,消耗了3g 内存,如果我没记错数据应该是这样),不过,这里用的前端(frontend)实现的是基于MQTT协议,我估计这个基于MQTT协议实现的frontend,基本不可能开源出来.这里只是说,默认提供的frontend不适合用于构建大型的推送平台(c10m规模的),一般而言(c10k级别的),个人感觉还是够用的.</p> <p>为了展示,更多pomelo 的相关特性,可能这里的逻辑业务,与实际有所不同.敬请注意</p> <p><a name="more"></a></p> <h2 id="menuIndex1">推送平台的架构图</h2> <p>整个应用的架构图:</p> <blockquote> <p><a href="http://static.oschina.net/uploads/img/201306/18023619_2bwZ.png"><img style="border

node.js 操作mysql数据库

余生颓废 提交于 2020-02-29 01:23:19
nodeJS 操作 MySQL 1. 在数据库(如例所示lzq)里建1张表(如例所示teachers)。 2. 安装nodeJS版MySQL驱动: npm install mysql; 3. 执行startSQL.js文件: node startSQL.js 4. 测试环境: node.js 0.6.12 5. 共2个js文件:startSQL.js and CRUD.js. startSQL.js -------------------------------> var CRUD = require('./CRUD'), sys = require('util'), client = require('mysql').createClient({'host':'localhost', 'port':3306, 'user':'root', 'password':'123456'}), ClientConnectionReady = function(client){ // - just for test, these variables can be from request process program. --------------------------------- var value = ['10', 'fillp', 'abc'], insertSQLString

如何给网站加入优雅的实时反爬虫策略

江枫思渺然 提交于 2020-02-28 17:25:58
你的网站内容很有价值,希望被google,百度等正规搜索引擎爬虫收录,却不想让那些无节操的山寨爬虫把你的数据扒走坐享其成。本文将探讨如何在网站中加入优雅的反爬虫策略。 【思路】 反爬虫策略要考虑以下几点: 能被google、百度等正规搜索引擎爬虫抓取,不限流量和并发数; 阻止山寨爬虫的抓取; 反爬虫策略应该是实时检测的,而不是通过一段时间后的访问统计分析得出; 误判后的人性化处理(优雅之所在); 大部分的爬虫不是以浏览器方式来访问页面的,爬虫只下载网页的html源代码,不加载包含在页面中的js/css/图片,这是区分爬虫与否的一个关键。一个请求被识别出来不是浏览器访问,一定是爬虫,为了满足上面所说的第1点和第2点,进一步对http头agent进行验证,是否标记为google、百度的spider,严格一点的话应该判别来源IP是否为google、baidu的爬虫IP,这些IP在网上都可以找到。校验出来IP不在白名单就可以阻止访问内容。 当然,有一部分爬虫是以浏览器载入的方式来抓取内容的,所以,即使被识别出来是浏览器访问的来源ip。还要检测这个个ip在一个时间片内的并发数,超过一定阀值,可以认为是爬虫,阻止访问内容。 由于我们的反爬虫策略是基于IP的,会出现误判,尤其是并发量限制的判别。我们需要一种友好的方式来阻止访问。直接返回50x/40x空白或者错误页面是很粗鲁的

给裸接口加一道防护,避免恶意盗刷和爬取

江枫思渺然 提交于 2019-12-24 13:42:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> WEB应用是开放的,WEB前端代码也是公开的,和后端交互的接口如果没有经过特殊处理(加密/token),那么就是裸露的,只要知道api地址,那么就能随便获取应用数据。这样应用数据就很容易被人爬取或者恶意盗刷,典型的短信被恶意盗刷。 公司理财产品的短信接口就是一个裸接口,只要手机号就可以任意盗刷,当然背后有根据手机号,ip地址做了请求限制,但还是不够。后面就加了一定时间内一定请求次数的Token,后面观察,基本没有被刷的迹象,说明新的机制还是起到很大作用。当然这个机制不仅是用于防短信盗刷,可用于任意的裸接口防护。 原理很简单,就是在web页面请求的时候由后端按一定的算法注入token到页面中去,然后前端可以通过对应的规则取到token,在请求接口数据时带上去就能在后端对token进行验证,验证通过就能正常请求到数据。如果是native app ,可通过加密的方法请求接口来获取token,最简单直接的方式就是native app 客户端使用一段字符串+时间戳(从后端获取)进行加密,然后请求后端接口,接口对数据进行解密,对时间戳对比,在一段时间内认为有效(避免加密信息被拦截,所以加了时间戳校验),从而获取token。 当然web应用都是公开的,所有源码理论上都是能获取到的

在Linux Mint下安装Grunt

只愿长相守 提交于 2019-12-22 20:45:48
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> [前言] 前几天重写了一个javascript的ui组件,今天在整合到与原有系统中,并且替换旧版本组件的时候,越来越感觉当前代码的组织,编写,自动化测试以及打包都很有问题。 现在javascript组件是越来越复杂,往往一个项目下来,js模块的数量还是很可观的。项目发布的时候,各种方面因素得考量我们还常常需要合并成一个文件发布。 另外如今有很多新的工具提高我们的开发效率,比如coffeescript,less,在保证第一条的时候我们当然希望以这种高效的方式进行开发。 作为编写过服务端代码的一名coder,我们会用在项目编译的时候同时运行单元测试,或者做持续集成。现在js也有很多单元测试框架,比如Chai,Mocha( 惭愧,俺一个都没有用过... ),要是javascript开发过程中也能自动运行单元测试,实现TDD等开发模式多好。 以上我们完全可以做到,使用Grunt即可。这也是我第一次使用Grunt,首先当然就是要安装Grunt了。 [操作系统] Linux mint 13 [正文] 从 Grunt Getting Started 我们可以了解到,目前Grunt要求您的计算机要安装NodeJS以及npm,其中NodeJS的版本要大于等于0.8.0。 如果您一开始图方便直接使用如下代码安装nodejs

为基于Express的应用上手,准备 Git与VS Code

牧云@^-^@ 提交于 2019-12-18 18:20:05
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> #Git与VS Code上手准备 基于express应用的,我打算用开发工具VS Code,版本管理工具Git ,所以还得学。 下载安装 git for windows #Git 项目根目录初始化本地仓库 >git init //初始化仓库 >git add . //所有文件夹及子文件目录 增加到本地仓库(一般不创建分枝与切换分枝默认都是master) >git commit -m '提交信息' //本地提交 项目根目录 新建.gitignore(增加git版本管理的忽略文件或文件夹列表) 如: 在.gitignore文件里,键入:node_modules //忽略该文件夹 支持正则表达式 编辑好后,在进行git添加与提交到本地库 >git add . >git commit -m 'something' 推送到远端 服务器 >git add remote branchname https://git.oschina.net/projectname/brachename.git >git push brachename master //依次远端分枝名 本地分枝名 验证身份,才能提交 在项目根目录.git文件夹,有个config,你可以编辑 [remote "projname"] url = https://

关于nodejs下redis/mysql需不需要连接池的问题

最后都变了- 提交于 2019-12-11 18:52:39
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 连接池的作用主要是较少每次临时建立连接所带来的开销。初步一看,nodejs运行单线程上,它不能同时使用多个连接,乍一看是不需要连接池的。但是这只是我们初步下意识的感觉,下面我们详细分析来看看这个结论对是不对。 先从简单的redis开始。 redis服务器也是运行在单线程上的。俩都是单线程,看起来更加坚定不需要连接池的结论了。 从详细的图像来看看nodejs 连接 redis用连接池有没有意义。 上图中,nodejs共有俩连接,分别发送查询请求到redis服务器上。因为redis是单线程作业,不管两个查询任务是由一个连接发来还是多个连接发来,也不管任务是串行一前一后先后发送到服务器,还是并行的同时发送到服务器上,redis都将他们一个个按顺序执行,并通过当前连接返回给客户端(这里是nodejs)。nodejs接受到redis的返回后,也管不了并行不并行,都得等他nodejs的主线程空闲的时候才能来一个个处理服务器返回的数据。 所以单从上面结论来看,nodejs + redis只需要公用一个连接就可以了,所以是不需要用连接池的。 再来看看nodejs + mysql下的情况 不同的是mysql不是单线程服务的,也就是它可以并行处理多个查询请求。 如上图所示,mysql会为每个连接创建一个单独的线程来查询