1. 什么是路由
在Web开发过程中,经常会遇到『路由』的概念。那么,到底什么是路由?简单来说,路由就是URL到函数的映射。
2. router和route的区别
route就是一条路由,它将一个URL路径和一个函数进行映射,例如:
/users -> getAllUsers()
/users/count -> getUsersCount()
这就是两条路由,当访问/users的时候,会执行getAllUsers()函数;当访问/users/count的时候,会执行getUsersCount()函数。
而router可以理解为一个容器,或者说一种机制,它管理了一组route。简单来说,route只
继续阅读 »
更多资料可参考:
A Complete Guide to Flexbox
Using CSS Flexible Boxes
继续阅读 »
本文基于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
继续阅读 »
参考文章
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将公钥以及域名等信
继续阅读 »
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
继续阅读 »
最近由于兴趣开始学习Go语言。对于编译型语言,最早接触的是Java,写了三年多,然而自从接触了异常灵活的脚本后就对它再也喜欢不起来。对于C系语言也一直没感觉。后来偶然看了一些Go相关的资料,也接触了一些基于Go编写的开源项目,觉得挺有意思,就学了一些,总的来说,还是比较喜欢Go的。
相比于Java,Go中没有了诸多繁琐的OO概念,接口的设计也非常简洁和解耦合。语法上,介于静态语言和动态语言之间,对于喜欢脚本的人来说,还是比较容易接受。
然后就是不得不提的goroutine,足够轻量和简单易用,比起其他语言中啰啰嗦嗦的一大堆多线程代码,确实更加让人喜欢。
基于Go,实现了一个HTTP请求模块ok。
学习资料
A Tour o
继续阅读 »
在涉及到有回调函数的情况下,回调函数可能是同步执行的,也可能是异步执行的。
例如:
```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(
继续阅读 »
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
继续阅读 »
一、引言
最早接触爬虫,是发现了一个叫做『豆瓣妹子』的网站,写了一个简单的程序可以批量下载图片。后来陆陆续续抓取过豆瓣电影,Google+,facejoking等网站。毕设的选题也是抓取新浪微博,然后分析博文的传播情况。最近一直对知乎的数据感兴趣,于是开发了Node模块zhihu-api,用于简化数据的抓取。
通常来说,所谓的爬虫,无非是通过程序来发送HTTP请求。因此理论上来说,所有浏览器能访问到的内容,都是可以通过爬虫来进行抓取的。
一般而言,我们所感兴趣的信息,只是页面中的某一部分数据,例如:某个标签的文本、链接地址、图片地址等。有些网站会提供开放的API(往往也会有很多限制),这时只需要直接请求该API,就可以拿到比较
继续阅读 »
参考资料
Middleware
redux-thunk
继续阅读 »