2017-01-10 Alex Sun
1. 什么是路由 在Web开发过程中,经常会遇到『路由』的概念。那么,到底什么是路由?简单来说,路由就是URL到函数的映射。 2. router和route的区别 route就是一条路由,它将一个URL路径和一个函数进行映射,例如: /users -> getAllUsers() /users/count -> getUsersCount() 这就是两条路由,当访问/users的时候,会执行getAllUsers()函数;当访问/users/count的时候,会执行getUsersCount()函数。 而router可以理解为一个容器,或者说一种机制,它管理了一组route。简单来说,route只 继续阅读 »
2016-11-30 Alex Sun
更多资料可参考: A Complete Guide to Flexbox Using CSS Flexible Boxes 继续阅读 »
2016-11-08 Alex Sun
本文基于Koa v2.0.0。 1. Koa vs Express Koa是继Express之后,Node的又一主流Web开发框架。相比于Express,Koa只保留了核心的中间件处理逻辑,去掉了路由,模板,以及其他一些功能。详细的比较可以参考Koa vs Express。 另一方面,在中间件的处理过程中,Koa和Express也有着一定区别,看下面例子: ```js // http style http.createServer((req, res) => { // ... }) // express style app.use((req, res, next) => { // ... }) // koa st 继续阅读 »
2016-10-17 Alex Sun
参考文章 iOS学习笔记——HTTPS原理篇 HTTPS工作原理和TCP握手机制 图解SSL/TLS协议 How to Use SSL/TLS with Node.js 在上一篇博文《Node核心模块之crypto》中,提到了加密(摘要,加密解密,签名等)的四种常见类型: Hash(哈希) HMAC(基于哈希的消息认证码) 加密,解密 签名,验证 HTTPS的整个过程和以上几种方法密切相关。 CA证书 CA 即 Certificate Authority (数字证书认证机构),CA证书的签发以及验证包含以下三方: CA Server Client 过程包括: Server生成一对公钥和私钥 Server将公钥以及域名等信 继续阅读 »
2016-09-27 Alex Sun
Hash 哈希函数(散列函数)主要用于生成消息摘要(Message Digest),即将任意大小的数据映射到一个固定大小的数据。最常见的如MD5,SHA1等。 ``` --------- hash function -------------- | input |---------------->| hash value | ``` 在Node中,通过crypto.getHashes()可以查看所支持的哈希算法: js crypto.getHashes() // => [ 'DSA', 'DSA-SHA', 'DSA-SHA1', ... ] 下面是一个MD5的例子: ```js var hash = crypt 继续阅读 »
2016-09-02 Alex Sun
最近由于兴趣开始学习Go语言。对于编译型语言,最早接触的是Java,写了三年多,然而自从接触了异常灵活的脚本后就对它再也喜欢不起来。对于C系语言也一直没感觉。后来偶然看了一些Go相关的资料,也接触了一些基于Go编写的开源项目,觉得挺有意思,就学了一些,总的来说,还是比较喜欢Go的。 相比于Java,Go中没有了诸多繁琐的OO概念,接口的设计也非常简洁和解耦合。语法上,介于静态语言和动态语言之间,对于喜欢脚本的人来说,还是比较容易接受。 然后就是不得不提的goroutine,足够轻量和简单易用,比起其他语言中啰啰嗦嗦的一大堆多线程代码,确实更加让人喜欢。 基于Go,实现了一个HTTP请求模块ok。 学习资料 A Tour o 继续阅读 »
2016-08-10 Alex Sun
在涉及到有回调函数的情况下,回调函数可能是同步执行的,也可能是异步执行的。 例如: ```js function callback() { console.log('callback') } function syncFn(fn) { fn() } function asyncFn(fn) { setImmediate(fn) } ``` 当执行: js syncFn(callback) console.log('hello world') 输出为: js // => callback // => hello world 当执行: js asyncFn(callback) console.log( 继续阅读 »
2016-07-28 Alex Sun
benchmark意为基准测试,常用来比较程序的性能。例如,比较不同方式拼接字符串的效率: js var a = 'hello' + 'world' var b = ['hello', 'world'].join('') 常用方法有: 运行相同的次数,用时少的效率高 运行相同的时间,运行次数多的效率高 1. 运行相同的次数 例如: ```js function f1() { return 'hello' + 'world' } function f2() { return ['hello', 'world'].join('') } function benchmark(name, fn) { var ti 继续阅读 »
2016-06-28 Alex Sun
一、引言 最早接触爬虫,是发现了一个叫做『豆瓣妹子』的网站,写了一个简单的程序可以批量下载图片。后来陆陆续续抓取过豆瓣电影,Google+,facejoking等网站。毕设的选题也是抓取新浪微博,然后分析博文的传播情况。最近一直对知乎的数据感兴趣,于是开发了Node模块zhihu-api,用于简化数据的抓取。 通常来说,所谓的爬虫,无非是通过程序来发送HTTP请求。因此理论上来说,所有浏览器能访问到的内容,都是可以通过爬虫来进行抓取的。 一般而言,我们所感兴趣的信息,只是页面中的某一部分数据,例如:某个标签的文本、链接地址、图片地址等。有些网站会提供开放的API(往往也会有很多限制),这时只需要直接请求该API,就可以拿到比较 继续阅读 »
2016-03-25 Alex Sun
参考资料 Middleware redux-thunk 继续阅读 »