用nodejs写个最简单的爬虫
需求最近在看个漫画,想把所有图片都下载下来存手机里,于是昨天就写了个爬虫。
环境
Nodejs : v6.11.0
123456// package.json"cheerio": "^1.0.0-rc.2","iconv-lite": "^0.4.18","request": "^2.81.0","should": "^11.2.1","superagent-charset": "^1.2.0"
步骤通过npm init命令创建项目一路回车就好了。
安装相关的依赖包npm install
打开网页,通过chrome分析漫画地址:http://m.kukudm.com/comiclist/1087/index.htm发现所有的章节链接都在 #list > li > a 里面,首先先通过nodejs获取整个html内容,然后提取出来每章漫画的链接。
12345678910111 ...
IE11 Get请求缓存问题
问题最近遇到一个问题,在版本是11.0.9600.18665的IE11上,发送给后台的get请求总是返回同样的值。给后台发送GET请求主要是获取验证码,但是比较神奇的是打开F12后就会发送GET请求了。
分析首先,我在页面里面打印一下每次GET请求返回的值,如下:
12345$.get('/login/securitycode1' , function(result){ alert(result)//为什么要用alert,因为在不打开F12的情况下console.log无法看到,因为打开F12后GET请求就正常了})
然后在服务器那块打印一下是否接受到了请求
1234router.get('/securitycode', function(req, res, next) { console.log("receive get request"); // ...});
最后发现页面里面alert的值每次都是一样,而服务器根本就没有收到页面发来的请求,也就是说nodejs根本没打印出来” ...
Angular2-busy引发的Cannot find module(ng build --aot)
背景最近写Angular4有这么一个需求,当发送post请求还没返回时(后台处理这个请求需要3-5秒的时间),页面显示一个蒙版,不让用户操作页面,如点击按钮之类的操作。
问题当运行ng build –aot –prod后,部署到nodejs服务器上,点击lazy类型的路由,就报错,cannot find module,如下图:
当只运行ng build的时候,一切正常
环境1234567891011121314151617"@angular/animations": "^4.0.0","@angular/cli": "^1.1.2","@angular/common": "^4.0.0","@angular/compiler": "^4.0.0","@angular/core": "^4.0.0","@angular/forms": "^4.0.0" ...
css笔记
据说是最好的清除浮动的方法12345678910.clearfix:after { clear: both; content: ' '; display: block; font-size: 0; line-height: 0; visibility: hidden; width: 0; height: 0;}
checkbox 不与说明文字对齐12vertical-align: top || middle;vertical-align: -3px;
微软雅黑的英文名字1Microsoft Yahei || \5FAE\8F6F\96C5\9ED1
让IE以最高版本执行1<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
ps:我就觉得这代码没用,有时候用360浏览器打开,IE模式还是quirks呢。。。可能真的有用,写html的时候还是加上吧,就当是心理安慰了。
Bo ...
Angular4 IE9 文件上传--记一次捣鼓经历
需求在IE9上,实现单个文件的上传。
环境
“@angular/animations”: “^4.1.3”,
“@angular/common”: “^4.0.0”,
“@angular/compiler”: “^4.0.0”,
“@angular/core”: “^4.0.0”,
“@angular/forms”: “^4.0.0”,
“@angular/http”: “^4.0.0”,
“@angular/platform-browser”: “^4.0.0”,
“@angular/platform-browser-dynamic”: “^4.0.0”,
“@angular/router”: “^4.0.0”,
“@ng-bootstrap/ng-bootstrap”: “^1.0.0-alpha.26”,
“bootstrap”: “^4.0.0-alpha.2”,
“classlist.js”: “^1.1.20150312”,
“core-js”: “^2.4.1”,
“int ...
Angular4.0 两个兄弟组件通过服务通讯
背景最近在Taptap上下载一个游戏,叫盗墓长生印,非常有意思,里面有一个小游戏,叫八宝盒,类似于华容道,打算开发一个网页版的自动完成,既然最近在学Angular4.0.0,那就拿Angular4.0开发把。算法我打算用DFS,用Typescript写算法不知道好不好写,二维数组就不怎么好定义。等完成后会放到github上。
网上查了好多,父子组件通讯比较简单,但是兄弟组件通讯只能用service,如果有更好的方法欢迎留言交流。
附一张八宝盒的截图
项目结构
说明Main这个组件主要是背景面板,执行DFS算法等。
FooterButton这个组件主要是有开始、重置、上一步、下一步按钮,并且点击八宝盒的滑块可以添加一个八宝盒到Main组件的面板上。
问题如何再单击FooterButton滑块后,告诉Main组件我要添加1号滑块?
解决方法创建一个Service
123456789101112131415161718//add-ba-bao-he.service.ts 这是兄弟组件通信的桥梁import { Injectable } from '@angu ...
Nodejs接收Tomcat发来的二进制流并让客户端下载
环境前端是Angular 1.5.8 , nodeJs + express。Nodejs作为代理服务器,转发客户端的Get、Post请求给Tomcat,并把接受到的Tomcat请求返回给客户端。客户端指的就是浏览器。
后台是Tomcat。提供接口。
需求后台Tomcat返回一个excel的2进制流,Nodejs接收到这个2进制流后返回给客户端。
本文的2进制流传送的是excel表格,换成其他文件也同理,反正都是2进制嘛~
问题客户端接收到的Excel是乱码,测试了各种编码(binary、utf8、gbk等),都是乱码。
关于问题的思考其实我饶了一圈,2进制流就是2进制流,不用考虑编码。
代码12345678910111213141516171819202122232425262728293031323334353637//Express 路由的jsrouter.get(/^\/(\d+)\/print/ , function(req , res , next){ var uid = req.params[0]; //正则匹配的\d var name = req.q ...
前后端分离 Nodejs作为Webserver 转发请求给Tomcat
项目环境我前端框架用的是Angular 1.5.8,Nodejs + express。后台用的是Tomcat,提供接口。
所有通讯都是通过get、post请求的方式。
问题遇到的很大的一个坑:如何判断用户是否登录?
解决方法有两种方式判断用户是否登录:
一、设置请求的cookie里面的JSESSIONID
二、跟后台沟通好,设置一个token,每次请求都发送token
我们项目的流程是先登录。首先发送个get请求获取验证码,这时候后台返回一个JsessionId,然后我的每次get、post请求都需要在cookie里面加上JsessionId。
先贴张直接访问Tomcat服务器验证码接口的get请求的图:
在Request Headers里面的cookie : JSESSIONID 这个就是后台返回的。询问了一下后台人员,jsessionid这是请求成功后Tomcat自动加的。
下面问题来了,如何拿到JSESSIONID,然后重新组装cookie给后台发回去呢?
我没用中间件来实现,直接用的原生http模块,下面上代码:
12345678910111213141516171819 ...
AngularJs 1.5.8版本 笔记
AngularJS笔记获取scope对象12var appElement = document.querySelector('[ng-controller=UserContractCtrl]');var $scope = angular.element(appElement).scope();
ng-class的用法12<label ng-class="{'aaa' : 'labelcheck1' ,'bbb' : 'labelcheck2' , 'ccc' : 'labelcheck3'}[label]">//label为String类型,根据它的值来判断添加哪个class
select的用法12345678//JS$scope.searchOption = [ { name: '申请代码', value: 'applicationCod ...